1

少し問題が発生しました。

c:forEach タグを介して文字列のリストを反復処理し、facelets の include タグを介してそれらを含めることにより、ビューを動的に生成します。

これは、レイアウトの構築には問題なく機能しますが、奇妙な動作を示します。

2 つのタブを含むプライムフェイスのタブビューがあります。最初のタブ (最初に表示されるもの) では、コンポーネント ID が設定されています (例: tabview:categoryTab) が、たとえば 2 番目のタブではそうではありません。ここでは、コンポーネント ID に対してのみ tabview: を取得します (ただし、実際にはtabview:usrTab である)

JSF が 2 番目のタブに設定した ID をオーバーライドするのはなぜですか? 仕様からいくつかの重要な情報が抜けていますか?

私は Primefaces 3.6 (スナップショット ビルド) で JSF 2 を使用します (はい、意図的にスナップショット ビルドを使用し、これを安定した PF リリースでもテストしましたが、同じ動作が発生します)。


編集

コード: admin.xhtml

<ui:composition template="/templates/commonLayout.xhtml">
    <ui:define name="content">
        <p:panel id="parentPanel">
            <h:outputText value="Verwaltung" />
            <br />
            <p:tabView id="tabview">
                <!-- insert marker -->
                <c:forEach items="#{adminTabs}" var="tab">
                    <ui:include src="#{tab}" />
                </c:forEach>
            </p:tabView>
        </p:panel>
    </ui:define>
</ui:composition>

catTab.xhtml

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:p="http://primefaces.org/ui"
    xmlns:ui="http://java.sun.com/jsf/facelets">
    <p:tab title="Categories Tab" id="catTab">
            ....
    </p:tab>
</ui:composition>

usrTab.xhtml

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:p="http://primefaces.org/ui"
    xmlns:ui="http://java.sun.com/jsf/facelets">
    <p:tab title="Users Tab" id="usrTab">
            ....
    </p:tab>
</ui:composition>

testTab.xhtml

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:p="http://primefaces.org/ui"
    xmlns:ui="http://java.sun.com/jsf/facelets">
    <p:tab title="TestTab" id="testTab">
            ....
    </p:tab>
</ui:composition>

ContentProvider.java

 public class ContentProvider {
    ....

    @Produces
    @Named("adminTabs")
    public List<String> getTabs(){
        List<String> components = new ArrayList<String>();
        components.add("/templates/tabs/catTab.xhtml");
        components.add("/templates/tabs/usrTab.xhtml");
        components.add("/templates/tabs/testTab.xhtml");
        return components;   
    }

    ....

}

これが生成されます:

<ul class="ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" role="tablist">
<li class="ui-state-default ui-tabs-selected ui-state-active ui-corner-top" aria-expanded="true" role="tab">
<a href="#tabview:catTab">Categories</a>
</li>
<li class="ui-state-default ui-corner-top" aria-expanded="false" role="tab">
<a href="#tabview:j_idt31">TestTab</a>
</li>
<li class="ui-state-default ui-corner-top" aria-expanded="false" role="tab">
<a href="#tabview:j_idt32">Benutzer und Rollen</a>
</li>
</ul>

繰り返しになりますが、最初のタブの ID のみが保持され、他のタブの ID は xhtml コードで設定されているにもかかわらず生成されます...

4

2 に答える 2

1

Richfaces 4 と JSF 2 で非常によく似た問題に遭遇しましたid。属性に EL 式を含めることで、問題を回避できました。私のため

<h:form id="staticName"> 

にレンダリングされていました

<form id="j_idblah>

しかし、一度私がやった

<h:form id="#{_objectInContext}">

適切にレンダリングされ始めました。かなりハックですが、今のところ動作します。幸運を!!

于 2013-04-22T23:02:16.947 に答える