如何确定OrganizationUnit(from /webapp/resources/acme/organizationUnit.xhtml)的绝对ID ?当我从树中选择一个节点时,organizationUnit应该显示选定的节点。我不能使用相对ID,因为p:ajax元素与organizationUnit组件不在同一命名容器中。在这种情况下,我需要使用绝对ID。使用Firebug时,组件的ID为tabs:0:editorsGroup:4:editor3:accountWindowsContainer:organizationUnit。这不是:form:tabs:editorsGroup:editor:accountWindowsContainer:organizationUnit组件的绝对ID吗?
/webapp/resources/acme/organizationUnit.xhtml
tabs:0:editorsGroup:4:editor3:accountWindowsContainer:organizationUnit
:form:tabs:editorsGroup:editor:accountWindowsContainer:organizationUnit
custom:include的配置如下:
<?xml version="1.0"?> <!DOCTYPE facelet-taglib PUBLIC "-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN" "http://java.sun.com/dtd/facelet-taglib_1_0.dtd"> <facelet-taglib> <namespace>http://acme.com/custom</namespace> <tag> <tag-name>include</tag-name> <component> <component-type>com.acme.custom.DynamicInclude</component-type> <handler-class>com.acme.client.custom.tags.DynamicIncludeHandler</handler-class> </component> </tag> </facelet-taglib> @FacesComponent("com.geneous.custom.DynamicInclude") public class DynamicInclude extends javax.faces.component.UIComponentBase{ ... } public final class DynamicIncludeHandler extends javax.faces.view.facelets.ComponentHandler { ... }
使用了Mojarra 2.0.8。
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:p="http://primefaces.org/ui" template="/WEB-INF/layouts/standard.xhtml"> <ui:define name="content"> <h:form id="form" prependId="false"> <!-- messages --> <p:growl id="msgs" showDetail="true" /> ... <h:panelGroup id="mainPanel"> <ui:include src="/WEB-INF/flows/actions-acc-flow/genericAccountsTable.xhtml" /> </h:panelGroup> </h:form> </ui:define> </ui:composition>
<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:p="http://primefaces.org/ui"> <h:outputScript library="primefaces" name="primefaces.js" /> <h:outputStylesheet library="primefaces" name="primefaces.css" /> <p:dataTable id="genericAccounts" ... </p:dataTable> <p:spacer height="1" /> <p:toolbar> <p:commandButton value="#{label.add}" action="#{accountsBean.initializeEntity}" immediate="true" update=":form:actionsDialog :form:msgs" oncomplete="actionsDialog.show()"> </p:commandButton> </p:toolbar> <ui:include src="/WEB-INF/flows/actions-acc-flow/mainDialog.xhtml" /> ... </ui:composition>
<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:p="http://primefaces.org/ui"> <p:dialog id="actionsDialog" widgetVar="actionsDialog" dynamic="true" modal="true"> ... <ui:include src="/WEB-INF/flows/actions-acc-flow/genericAccount.xhtml"/> ... </p:dialog> </ui:composition>
<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:p="http://primefaces.org/ui" xmlns:c="http://java.sun.com/jstl/core" xmlns:custom="http://geneous.com/custom"> <p:tabView id="tabs" value="#{accountsBean.groups}" var="group"> <p:tab title="#{eval.getString(group.name)}"> <p:dataTable id="editorsGroup" value="#{group.editors}" var="editor"> <p:column> <custom:include src="#{editor.component}" id="editor"> <ui:param name="beanName" value="#{editor.beanName}" /> <ui:param name="enabled" value="#{editor.enabled}" /> <ui:param name="mandatory" value="#{editor.mandatory}" /> <ui:param name="name" value="#{editor.name}" /> </custom:include> </p:column> </p:dataTable> </p:tab> </p:tabView> </ui:composition>
INF/flows/editors/accountsWindowsContainer.xhtml(此文件存储在editor.componentgenericAccount.xhtml 中并包含在其中)
editor.component
<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:acme="http://java.sun.com/jsf/composite/acme"> <acme:organizationUnit bean="#{windowsContainer}" mandatory="#{mandatory}" name="#{name}" id="accountWindowsContainer" /> </ui:composition>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:composite="http://java.sun.com/jsf/composite" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:p="http://primefaces.org/ui"> <!-- INTERFACE --> <composite:interface> <composite:attribute name="bean" type="java.lang.Object" required="true" /> <composite:attribute name="mandatory" type="boolean" required="true"/> <composite:attribute name="name" type="java.lang.String" required="true" /> </composite:interface> <!-- IMPLEMENTATION --> <composite:implementation> <h:panelGrid columns="2"> <h:outputText value="#{cc.attrs.name}: #{cc.attrs.mandatory ? '*' : ''}" /> <p:tree value="#{cc.attrs.bean['root']}" var="node" selectionMode="single" selection="#{cc.attrs.bean['selectedNode']}"> <p:ajax event="select" listener="#{cc.attrs.bean['onNodeSelect']}" update="absolute_id_of_organization_unit" /> <p:treeNode> <h:outputText value="#{node}" /> </p:treeNode> </p:tree> <h:outputText /> <p:inputText id="organizationUnit" value="#{cc.attrs.bean['selectedItemPath']}" disabled="true" /> </h:panelGrid> </composite:implementation> </html>
这不是:form:tabs:editorsGroup:editor:accountWindowsContainer:organizationUnit组件的绝对ID吗?
仅当您从中 删除 并且可以确保您的实现时,就是这样。如果后者不正确,则需要从绝对ID中删除该零件。prependId="false"``<h:form>``<custom:include>``NamingContainer``:editor
prependId="false"``<h:form>``<custom:include>``NamingContainer``:editor