4

P:layout タグ内に P:contextMenu を記述する必要があります。最初の P:layout の ContextMenu はレンダリングされません。マイページは以下の通りです。

  <html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
xmlns:c="http://java.sun.com/jsp/jstl/core">
  <h:body>
 <h:form id="statementsOfAccountForm">
        <p:layout id="playout" style="min-width:400px;min-height:200px;">
            <p:layoutUnit position="west" resizable="true" size="100"
                minSize="40" maxSize="200" collapsible="true">
    <h:form id="statementsOfAccountLeftForm">
                <p:contextMenu>
                    <p:menuitem value="Account Summary" 
                         />
                    <p:menuitem value="Mini Statement" 
                         />

                </p:contextMenu>
  </h:form>
            </p:layoutUnit>

            <p:layoutUnit position="center" id="centerPage" collapsible="true">
                 <h:form id="statementsOfAccountCenterForm">
        <div align="center">hi</div>
      </h:form>
        </p:layout>
    </h:form>

これが私のコードです!次のような出力が表示されます: コンテキスト メニューが適切な形式で表示されません。ページにはプレーンなリンクのみが表示されます。何が問題なのですか?助けてください。こちらのスクリーンショットをご覧ください

4

4 に答える 4

1

属性はupdate、ID のコンポーネントを見つけられない可能性が高いため、centerPageレンダリングされません。

centerPageupdate 属性を menuItem から一時的に削除してから、更新するlayoutUnit内のコンポーネントの生成されたクライアント ID のクライアント ソースを評価します。その後、clientId によってこれらを具体的に参照できます。

ただし、問題の 1 つは、layoutUnitコンポーネントが参照用のクライアント側コンポーネントを生成しない可能性が高いことです。そのため、おそらくこの layoutUnit 内のコンポーネントを直接参照する必要があります。

...
<p:menuitem value="Account Summary" update=":statementsOfAccountForm:centerPageGroup"
... 


<p:layoutUnit position="center" id="centerPage" collapsible="true">
    <h:panelGroup layout="block" id="centerPageGroup"><ui:include 
        src="#{helloBean.pageName}.xhtml" /></h:panelGroup> 
</p:layoutUnit>

これは、特に update 属性を使用して ID を参照する方法の例です。

于 2012-08-27T12:50:49.757 に答える
0

レイアウトは単一の h:form 内にあります。実際には、各レイアウト ユニット内に ah:form が必要です。したがって、次のことを試してください。

<p:layout id="playout" style="min-width:400px;min-height:200px;">
    <p:layoutUnit position="west" resizable="true" size="100"
        minSize="40" maxSize="200" collapsible="true">
        <h:form id="statementsOfAccountLeftForm">
            <p:contextMenu>
                <p:menuitem value="Account Summary" update="centerPage"
                    actionListener="#{helloBean.changeCenterPage('accountSummary')}" />
                <p:menuitem value="Mini Statement" update="centerPage"
                    actionListener="#{helloBean.changeCenterPage('miniStatement')}" />

            </p:contextMenu>
        </h:form>
    </p:layoutUnit>

    <p:layoutUnit position="center" id="centerPage" collapsible="true">
        <h:form id="statementsOfAccountCenterForm">
            <div align="center"><ui:include
                src="#{helloBean.pageName}.xhtml" /></div>
        </h:form>
    </p:layoutUnit>
</p:layout>
</h:form>
于 2012-08-30T14:05:34.533 に答える
0

Primefaces 3.3 User's Guide の245 ページには、次のように書かれています。

フォームとフル ページ レイアウトを使用する場合は、生成された DOM が同じではない可能性があるため、レイアウト ユニットを含むフォームを使用しないでください。したがって、以下は無効です。

<p:layout fullPage="true">
    <h:form>
        <p:layoutUnit position="west" size="100">
            <h:outputText value="Left Pane" />
        </p:layoutUnit> 
        <p:layoutUnit position="center">
            <h:outputText value="Right Pane" />
        </p:layoutUnit>
    </h:form>
</p:layout>

代わりに、レイアウト ユニットには独自のフォームが必要です。また、同じ理由でレイアウト ユニットを更新しようとするのは避け、代わりにコンテンツを更新してください。

Primefaces メニューは、layoutUnits 内で使用する場合、少し問題があります。この問題を解決するには、次の CSS スニペットを使用できます。

<style type="text/css">
.ui-layout-unit-center {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    z-index: -1;
}

.ui-layout .ui-layout-noscroll div.ui-layout-bd {
    overflow: visible;
}
</style>

または、上記が機能しない場合は、別のアプローチを試すことができます。

<style type="text/css">
.ui-layout-west {
    z-index:20 !important;
    overflow:visible;
}

.ui-layout-west .ui-layout-unit-content {
    overflow:visible;
}
</style>
于 2012-09-05T17:33:38.887 に答える
0

私はあなたの例を試しました(バッキングBeanへの参照を削除しました)が、期待どおりに動作します:

<h:form id="statementsOfAccountForm">
    <p:layout id="playout" style="min-width:400px;min-height:200px;">
        <p:layoutUnit position="west" resizable="true" size="100"
            minSize="40" maxSize="200" collapsible="true">
            <p:contextMenu>
                <p:menuitem value="Account Summary" update="centerPage" />
                <p:menuitem value="Mini Statement" update="centerPage" />
            </p:contextMenu>
        </p:layoutUnit>
        <p:layoutUnit position="center" id="centerPage" collapsible="true">
            <div align="center">
            </div>
        </p:layoutUnit>
    </p:layout>
</h:form>

結果:

コンテキスト メニューの結果

私とまったく同じことを試してみることをお勧めします。これが機能することを確認したら、さらにコードを追加します。

于 2012-08-30T12:45:15.140 に答える