0

誰かが私のリンクを表示できるように許可を持っているかどうかを確認したいのですが、[表示]リンクをクリックすると、そのリンクが消えてprepareView()が処理されない理由がわかりません。どうしたの ?

<c:if test="#{controller.viewMode == 'OK'}">
    <h:commandLink action="#{controller.prepareView()}" value="View"/>
</c:if>
<h:commandLink action="#{controller.prepareEdit()}" value="Edit"/>
<h:commandLink action="#{controller.destroy()}" value="Delete"/>
4

1 に答える 1

2

これは、背後の値#{controller.viewMode}が、フォーム表示の要求と比較して、フォーム送信の要求で互換性なく変更された要求スコープの条件に依存する場合に発生する可能性があります。

フォーム送信の処理のビューの復元フェーズ中に、<c:if>が再評価されます。#{controller.viewMode}その時点で「OK」ではない場合(フォーム表示の最初の要求中にそれが行われた場合でも)、コマンドリンクはコンポーネントツリーに表示されなくなります。その場合、そのアクションはデコードも呼び出しもされません。

#{controller.viewMode}これを修正するには、ポストバックリクエスト中に、最初のリクエスト時とまったく同じ値が返されることを確認する必要があります。Beanがリクエストスコープの場合、基本的に、そのプロパティがリクエストスコープのBeanの(ポスト)コンストラクタで適切に初期化されていることを確認する必要があります。

または、代わりにBeanをビュースコープに配置して、同じビューを操作している限りBeanインスタンスが存続するようにすることもできますが、タグハンドラーで使用すると別の問題が発生します。したがって、ビュースコープを使用する場合は、JSTLテストをrenderedJSFコンポーネントの属性に置き換える必要があります。

@ManagedBean
@ViewScoped
public class Controller {
    // ...
}

<h:commandLink value="View" action="#{controller.prepareView}" rendered="#{controller.viewMode == 'OK'}" />

参照:

于 2012-11-22T10:50:16.513 に答える