相关疑难解决方法(0)

如何找到ajax update/render组件的客户端ID?找不到带有"bar"引用的表达式"foo"的组件

下面的代码是从PrimeFaces的DataGrid + DataTable的教程启发和放入<p:tab>一个的<p:tabView>居住在<p:layoutUnit><p:layout>.这是代码的内部部分(从p:tab组件开始); 外部是微不足道的.

<p:tabView id="tabs">
    <p:tab id="search" title="Search">                        
        <h:form id="insTable">
            <p:dataTable id="table" var="lndInstrument" value="#{instrumentBean.instruments}">
                <p:column>
                    <p:commandLink id="select" update="insTable:display" oncomplete="dlg.show()">
                        <f:setPropertyActionListener value="#{lndInstrument}" 
                                        target="#{instrumentBean.selectedInstrument}" />
                        <h:outputText value="#{lndInstrument.name}" />
                    </p:commandLink>                                    
                </p:column>
            </p:dataTable>
            <p:dialog id="dlg" modal="true" widgetVar="dlg">
                <h:panelGrid id="display">
                    <h:outputText value="Name:" />
                    <h:outputText value="#{instrumentBean.selectedInstrument.name}" />
                </h:panelGrid>
            </p:dialog>                            
        </h:form>
    </p:tab>
</p:tabView>
Run Code Online (Sandbox Code Playgroud)

当我单击时<p:commandLink>,代码停止工作并给出消息:

找不到表达式为"insTable:display"的组件,引用自"tabs:insTable:select".

当我尝试相同的使用时<f:ajax>,它失败了,基本上告诉相同的不同消息:

<f:ajax> 包含一个未知的id"insTable:display"无法在组件"tabs:insTable:select"的上下文中找到它

这是怎么造成的,我该如何解决?

ajax jsf clientid primefaces jsf-2

131
推荐指数
3
解决办法
15万
查看次数

使用JSF 2.0获取命名容器内的组件clientId的完整前缀

我在JSF中通过AJAX更新组件:

<h:form>
    <h:outputLink>Click me
        <f:ajax event="click" render=":messages" />
    </h:outputLink>
</h:form>

<h:messages id="messages" globalOnly="true" />
Run Code Online (Sandbox Code Playgroud)

由于<h:messages />驻留在外面,<h:form />我必须在ID前面添加冒号(:).这有效.

但是,如果我将相同的代码放入组件并将该组件包含到我的页面中,则代码将失败.原因是:messages声明是指组件层次结构的根,而<h:messages />我想要更新的组件实际上位于我的自定义组件下,该组件位于页面下(因此位置是样式的:myComponent:messages.

在我的组件内部,如何实现<h:messages />组件的正确前缀?我知道我可以手动为我的组件分配ID,并使用它来为引用添加前缀(如:#{cc.attrs.id}:messages).但是,我不知道这个组件所处的组件层次结构的级别,所以所需的前缀甚至可能是这样的:foo:bar:x:y:messages.

java jsf components reference jsf-2

15
推荐指数
1
解决办法
1万
查看次数

如何通过h:outputScript包含JavaScript文件?

我想使用jQuery Validate插件和JSF进行客户端表单验证.我发现导入资源的基本困难.

在我的JSF页面中

<h:outputScript library="js" name="jquery-1.6.2.js"></h:outputScript>
<h:outputScript library="js" name="jquery.validate.js"></h:outputScript>
<h:outputScript library="js" name="jquery.maskedinput.js"></h:outputScript>
<h:outputScript library="js" name="myapp.validate.js"></h:outputScript>
Run Code Online (Sandbox Code Playgroud)

当我单击Firefox中的脚本选项卡时,我无法在下拉列表中看到任何脚本文件.有一条消息显示:

如果标签具有"type"属性,则它应该等于"text/javascript"或"application/javascript".脚本也必须是可解析的(语法正确).

我的jquery效果如鼠标悬停,隐藏,显示等不起作用.我尝试使用通常的脚本标签

<script type="text/javascript" src="../js/jquery-1.6.2.js"></script>
<script type="text/javascript" src="../js/jquery.validate.js"></script>
<script type="text/javascript" src="../js/jquery.maskedinput.js"></script>
<script type="text/javascript" src="../js/myapp.validate.js"></script>
Run Code Online (Sandbox Code Playgroud)

哪个没用.仍然无法找到我的JS文件.我的所有JS文件都放在

   Web pages
       |_ js
           |_jquery-1.6.2.js,my.validate.js,jquery.validate.js,jquery.maskedinput.js
Run Code Online (Sandbox Code Playgroud)

我尝试了使用jQuery和JSF 2.0资源发布的解决方案之一,但没有成功.

请建议我解决这个问题.我不想在ajax中使用JSF内置验证,因为我们将代码从JSP移到JSF并且已经编写了验证.我想重用我之前写过的现有jQuery验证.

jquery facelets jquery-validate jsf-2

15
推荐指数
1
解决办法
4万
查看次数