2012-03-19 11 views
0

jstlを小さなテストに使用しています。そして、それはここ条件付きレンダリング<h:commandButton>を使用して<c:if>

を動作するようになっているか機能していませんが、小さなコードです:

<c:set var="id" value="#{mBlog.blog.id}"/> 
        ${id} //printing 4 
        <c:if test="${id > 0}"> 
         <h:commandButton value="Update" action="#{mBlog.update}"/> //is not rendered 
        </c:if> 

        <c:if test="${id == 0}"> 
         <h:commandButton value="Save" action="#{mBlog.save}"/> //is not rendered 
        </c:if> 

私が間違っているかわかりません。ディスプレイには私だけが4、他の何も参照してください。

+1

明らかに、「h」の正しいtaglibライブラリをインポートしていますか?あなたの 'c:if'条件で明らかに間違ったことはありません。 taglib以外の他のコンテンツをそれらに入れることで、実行がこれらの条件を入力するかどうかを簡単に確認することができます。 –

+1

問題はjstlに関連していないようです。それはjsfに関連しています。私は簡単な質問があります:ページをレンダリングする前またはレンダリング後にloadメソッドが呼び出されると、あるページで私はこのリスナーを持っていますし、その後コードの行がトップに書きました。 loadメソッドを呼び出す前にjstlタグをレンダリングしています。それが正しいか? – Elbek

答えて

4

JSTLタグとJSF UIコンポーネントは、コーディングのとおりには動作しません。長い話短い:JSTL in JSF2 Facelets... makes sense?これを注意深くお読みください。

特定のケースでは、JSTL <c:if>タグ条件は、JSF <f:event>タグの結果に依存しているようです。 <c:if>が実行された時点で、ビューの構築時に<f:event>はまだ実行されていません。プリレンダリングビューのイベント中に実行されるためです。したがって、#{mBlog.blog.id}は常にnullまたはその他のデフォルトです。

JSFコンポーネントのrendered属性を代わりに使用する必要があります。また、コードをきれいに保ちます。

<h:commandButton value="Update" action="#{mBlog.update}" rendered="#{mBlog.blog.id gt 0}" /> 
<h:commandButton value="Save" action="#{mBlog.save}" rendered="#{mBlog.blog.id eq 0}" /> 

ただし、このアクションを呼び出す際には、将来の問題が発生する可能性があります。 Beanが要求スコープではなくビュースコープに配置されていることを確認します。

+0

お返事ありがとうございます。私はjstlに来る前にそれをしました。私が行うとき、jsfボタンはメソッド(つまり、beanのupdate()メソッド)を呼び出さない。私はそれらを2つの形に分割しました。私は生き残ることができない良い方法ナット。 – Elbek

+0

あなたのBeanはビューのスコープにありませんでした。私の答えの最後の文も見てください。この現象は、後続の要求の要求値適用段階で正しく評価されない要求ベースの条件に基づいてボタンがレンダリングされる要求スコープBeanでは一般的です。 beanスコープスコープを作成することが本当にオプションでない場合は、 'f:event'が行っていることを' @ PostConstruct'メソッドに移し、 ' 'の代わりに' @ ManagedProperty'を使用する必要があります。 – BalusC

+0

ところで私は問題を見つけた。問題はこのページにあり、プレレンダービューのリスナーはこのページにあります。しかし、jsfはすべてのjstlタグをレンダリングした後にこのメソッドを呼び出します。それはjstl mBlog.blog.idがnullになることです。私はprerenderviewリスナーにblog attrを設定していますが、このリスナーはこのページのjstlタグをレンダリングした後に呼び出されます。私は知らないけど、それはそうであってはならないようだ。 JSFは最初のリスナーをそのページにバインドしてレンダリングする必要があります。しかし、それは逆の順序で行っています。 – Elbek

関連する問題