1

プロフィールを表示するページがあるので、それは URL../faces/savedProfile.xhtml?profileId=1234です。

そのページには、次のようないくつかの p:commandLink コンポーネントを含む p:pane があります。

<p:panel rendered="#{profileController.canViewProfile}">
...
    <p:commandLink 
        id="duplicateLink"
        value="Duplicate"
        action="#{profileController.duplicateProfile}"/>
...
</p:panel>

できます。次に、別のレンダリング条件を追加します。

<p:panel rendered="#{profileController.canViewProfile
        and param['profileId'] != null}">
...
    <p:commandLink 
        id="duplicateLink"
        value="Duplicate"
        action="#{profileController.duplicateProfile}"/>
...
</p:panel>

p:commandLink が表示されますが、アクティブではありません。クリック時にアクションメソッドが呼び出されていないようです。その追加のレンダリング条件が commandLink を強制終了するのはなぜですか?

4

1 に答える 1

1

このrendered属性は、コマンド リンクを含むページを返す HTTP リクエスト中に評価されるだけでなく、コマンド リンクによって開始された HTTP リクエスト中にも評価されます。どうやら、HTTP リクエスト中にリクエスト パラメータを保持していないため、rendered属性が評価されfalse、クリックされたコマンド リンクを識別できず、アクション イベントがキューに入れられません。

これは、 commandButton/commandLink/ajax action/listener method not invoked or input value not updatedのポイント 5 と一致します。

<f:param>あなたの場合の解決策は、リクエストパラメータを保持するために追加することです:

<p:commandLink ...>
    <f:param name="profileId" value="#{param.profileId}" />
</p:commandLink>

具体的な問題とは関係emptyなく、代わりに!= nullwhich を使用すると、空の文字列もカバーされます。

<p:panel rendered="#{profileController.canViewProfile and not empty param.profileId}">

または、ビュー スコープ Bean (およびコンバーター)<f:viewParam>と組み合わせて使用​​することをお勧めします。Profile

<f:viewParam name="profileId" value="#{profileController.profile}" />

<p:panel rendered="#{profileController.canViewProfile and not empty profileController.profile}">

以下も参照してください。

于 2013-05-22T12:27:47.037 に答える