Jsf 2 (Primefaces+;JSF)选项卡ajax中出现错误
我的代码:Jsf 2 (Primefaces+;JSF)选项卡ajax中出现错误,jsf-2,primefaces,Jsf 2,Primefaces,我的代码: <h:form id="form"> <p:tabView dynamic="true" id="tabform" orientation="left"> <p:tab id="tab1" title="Tree"> <p:growl id="messages" showDetail="true" />
<h:form id="form">
<p:tabView dynamic="true" id="tabform" orientation="left">
<p:tab id="tab1" title="Tree">
<p:growl id="messages" showDetail="true" />
<p:panel style="float:left">
<p:tree value="#{treeBean.root}" var="node" dynamic="true" cache="false"
selectionMode="single" selection="#{treeBean.selectedNode}" id="tree" >
<p:ajax event="expand" update=":form:tabform:tab1" listener="#{treeBean.onNodeExpand}" />
我有一个错误:
请向我解释原因,感谢您的建议:)这似乎是
p:ajax
的更新属性中的错误id问题
查看页面的呈现html源代码并确定选项卡的正确id。可能您在id字符串中遗漏了一个子组件。您可以使用以下解决方案
可以将要呈现的元素绑定到将存在于请求范围中的hashmap
除了在render
属性中使用该绑定之外,它听起来可能很复杂,但实际上并非如此
这里有一个例子
通过faces-config.xml将哈希映射放入请求范围:
<managed-bean>
<description>Holder of all component bindings.</description>
<managed-bean-name>components</managed-bean-name>
<managed-bean-class>java.util.HashMap</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
所有组件绑定的持有者。
组件
java.util.HashMap
要求
而不是像这样使用它:
<p:message binding="#{components.myMessage}"></p:message>
或
最后把它渲染成这样
<p:ajax event="expand" update="#{components.myMessage.clientId}" listener="#{treeBean.onNodeExpand}"></p:ajax>
或
此解决方案取自BalusC关于如何获取id的旧答案…它与update=@form
一起工作吗?是的,它与update=@form:|我不想全部更新,因为表单有许多组件。@user1254072:请将错误复制并粘贴到此处。这样,当图像链接消失时,它仍然存在,并且可以通过搜索找到。id是“:form:tabform:tab1”,正如您看到的id flow:form->tabform->tab1这真的是浏览器中html源的id吗?尾随“:”表示它不是.html源代码:因此id字符串是正确的。因此,从理论上讲,这应该是可行的。如果你更新了整个选项卡怎么办?对不起。如果update=“:form:tabform:tab1”,它将工作。但是update=“:form:tabform:tab1:messages”它报告上面的错误:|我有很多组件,所以我不想更新整个tabview。
<p:ajax event="expand" update="#{components.myMessage.clientId}" listener="#{treeBean.onNodeExpand}"></p:ajax>
<p:ajax event="expand" update="#{components.myTabName.clientId}" listener="#{treeBean.onNodeExpand}"></p:ajax>