【发布时间】:2012-09-13 12:55:49
【问题描述】:
下面的代码片段代表一个编辑器。在我的应用程序中,一个窗口在选项卡面板中显示一组编辑器,每个选项卡都包含一个数据表,其中编辑器作为行。当一个节点被选中时,其文本将显示在 organizationUnit 输入文本中。编辑不应该知道它的父母。是否可以在不使用绝对客户端 ID 的情况下更新 organizationUnit?
<p:tabView value="#{accountsBean.groups}" var="group">
<p:tab title="#{eval.getString(group.name)}">
<p:dataTable value="#{group.editors}"
var="editor">
<p:column>
<custom:include src="#{editor.component}">
<ui:param name="bean" value="#{editor.beanName}"/>
<ui:param name="mandatory" value="#{editor.mandatory}"/>
<ui:param name="name" value="#{editor.name}"/>
</custom:include>
</p:column>
</p:dataTable>
</p:tab>
</p:tabView>
<h:panelGrid id="containerEditor" columns="2">
<h:outputText value="#{name}: #{mandatory ? '*' : ''}" />
<p:tree value="#{bean.root}" var="node" selectionMode="single" selection="#
{selectedNode}">
<p:ajax event="select" listener="#{bean.onNodeSelect}"
update="update_organization_unit" immediate="true" />
<p:treeNode>
<h:outputText value="#{node}" />
</p:treeNode>
</p:tree>
<h:outputText />
<p:inputText id="organizationUnit" value="#{bean.selectedItemPath}"
disabled="true" />
</h:panelGrid>
标签面板位于名为 form 的表单中,其中 prependId="false"
【问题讨论】:
-
我很难理解你的问题,是什么阻止你使用
update="organizationUnit"?您还应该明确代码的下部是某种组件,并发布 custom:include 的完整代码 -
@RasmusFranke 我理解了这个问题,它确实与代码有关。他不能这样做,因为
<p:inputText> 和<p:ajax>在不同的 NamingContainers 中。 -
ajax 事件位于命名容器内,该命名容器位于 inputText 的命名容器内。如果当前容器中不存在 id,我认为 JSF 会在父容器中查找。
-
如果我在更新语句中使用 organizationUnit 严重:javax.faces.FacesException:找不到标识符为“organizationUnit”的组件,该组件引用自“j_idt85:0:j_idt88:4:j_idt903:j_id647446661_47d7f77b: j_idt2"。
-
ajax事件在p:treeTable里面,它是一个命名容器,输入文本有datatable作为命名容器。
标签: java jsf primefaces