查找具有ID属性的每个组件的父ID

时间:2015-03-02 10:07:47

标签: jsf jsf-2 components tree-traversal

我正在使用JDK1.7,JSF2和Primefaces。

我有一个.xhtml,如下所示。我想将Parent and the Child Relations列为<Component Id Tree Structure> | <Id> | <Child of Id- Parent>,如Expected Output

所示

xhtml:

<h:form id="rootParentForm">

    <p:treeTable id="singleTreeTble" value="#{ttSelectionView.root1}" var="document" selectionMode="single" selection="#{ttSelectionView.selectedNode}" style="margin-top:0">
        <f:facet name="header">
            Single
        </f:facet>
        <p:column headerText="Name">
            <h:outputText value="#{document.name}" />
        </p:column>
        <p:column headerText="Size">
            <h:outputText value="#{document.size}" />
        </p:column>
        <p:column headerText="Type">
            <h:outputText value="#{document.type}" />
        </p:column>
    </p:treeTable>

    <p:commandButton id="singleCmdBtn" value="Display" update="msgs" icon="ui-icon-newwin"
                        actionListener="#{ttSelectionView.displaySelectedSingle}"/>


    <h3 style="margin-top:0">Basic</h3>
    <p:accordionPanel id="basicAP">
        <p:tab id="basicTab1" title="Godfather Part I">
            <h:panelGrid columns="2" cellpadding="10">
                <p:graphicImage name="demo/images/godfather/godfather1.jpg" />
                <h:outputText
                    value="The story begins as Don Vito Corleone..." />
            </h:panelGrid>
        </p:tab>
        <p:tab id="basicTab2" title="Godfather Part II">
            <h:panelGrid columns="2" cellpadding="10">
                <p:graphicImage name="demo/images/godfather/godfather2.jpg" />
                <h:outputText value="Francis Ford Coppola's legendary..." />
            </h:panelGrid>
        </p:tab>
        <p:tab id="basicTab3" title="Godfather Part III">
            <h:panelGrid columns="2" cellpadding="10">
                <p:graphicImage name="demo/images/godfather/godfather3.jpg" />
                <h:outputText value="After a break of more than 15 years..." />
            </h:panelGrid>
        </p:tab>
    </p:accordionPanel>

    <h3>Multiple Selection</h3>
    <p:accordionPanel id="multipleAP" multiple="true">
        <p:tab id="multipleTab1"  title="Godfather Part I">
            <h:panelGrid columns="2" cellpadding="10">
                <p:graphicImage name="demo/images/godfather/godfather1.jpg" />
                <h:outputText
                    value="The story begins as Don Vito Corleone..." />
            </h:panelGrid>
        </p:tab>
        <p:tab id="multipleTab2"  title="Godfather Part II">
            <h:panelGrid columns="2" cellpadding="10">
                <p:graphicImage name="demo/images/godfather/godfather2.jpg" />
                <h:outputText value="Francis Ford Coppola's legendary..." />
            </h:panelGrid>
        </p:tab>
        <p:tab id="multipleTab3"  title="Godfather Part III">
            <h:panelGrid columns="2" cellpadding="10">
                <p:graphicImage name="demo/images/godfather/godfather3.jpg" />
                <h:outputText value="After a break of more than 15 years...." />
            </h:panelGrid>
        </p:tab>
    </p:accordionPanel>    
</h:form>

预期输出 Expected Output

这样做的最佳方法是什么?因此,所有父母和子女关系都将按预期列出。

我将上传xhtml页面然后我想找到&amp;显示亲子关系。

1 个答案:

答案 0 :(得分:1)

我相信,你应该:

  1. 使用FacesContext.getCurrentInstance();

  2. 获取当前的FacesContext
  3. 使用当前实例的getViewRoot()获取视图根目录 - 您将 获取UIComponent的实例,其中包含visitTree()方法;

  4. 使用UIComponent实例的visitTree()方法 - 传递回调 测试的功能,是否设置了id属性等。

  5. 您可能会发现与JSF Specifications捆绑在一起的JSF API文档很有用。

    要执行所有操作,您需要将xhtml解析为组件树。如果是Facelets标记,javax.faces.view.facelets包中的类和javax.faces.application.ResourceHandlerWrapper一样有用。

    如果上传的xhtml与服务器端应用程序无关,则还需要存根EL表达式。