JavaでHREF値を動的な値に置き換える方法
<a href=\"http://www.example.com\"> with <a href=\ outcome \">
ここで、文字列結果 ="home\login.jsf"
さまざまな種類の結果が考えられます。プレーンな HTML または h:outputLink や h:link などのコンポーネントを使用している場合、EL 式は 100% 動的ではなく、ページのレンダリング中に解釈されます。
<h:link outcome="#{bean.link}" value="I go to a page!"/>
href で<a>
指定されたリンクを持つタグになります。#{bean.link}
また、JSF 2.x では、Bean 属性を参照する if 句を追加することで、Defiend ルールで条件付きナビゲーションを使用できます。
<navigation-rule>
<from-view-id>index.xhtml</from-view-id>
<navigation-case>
<from-outcome>logIn</from-outcome>
<if>#{sessionBean.sessionActive}</if>
<to-view-id>userDashboard.xhtml</to-view-id>
<else if>#{sessionBean.rejectedUser}</else if>
<to-view-id>index.xhtml</to-view-id>
<else>
<to-view-id>register.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
一方、h:commandButton や h:commandLink などの要素には、戻り値の型が String または void のメソッドを参照する action 属性があります。メソッドが文字列を返す場合、「#」またはナビゲーション ルール (暗黙的なナビゲーションまたは構成済みのルール) を返すことができます。
<h:commandLink value="Log In" action="#{bean.logIn}"/>
Bean から logIn メソッドが呼び出されます。
public String logIn() {
//Your login logic
if(userIsLoggedIn) {
return "userDashboard"; //Implicit navigation
} else {
return "index"; //Implicit navigation
}
}
暗黙的なナビゲーション (JSF 2.x) を使用すると、ページの名前を返すことで、同じフォルダー内のページ間を移動できます。たとえば、戻るindex
と、ユーザーは に送信されindex.jsf
ます。
EL (JSTL など) を使用して文字列をレンダリングする必要があります。
JSTL の例は次のとおりです。
<a href=#{outcome}> with <a href=\ outcome \">
'a'タグを'h:commandLink'タグに置き換え、必要に応じて値とアクションをバインドします。
<h:commandLink value="#{..}" action="#{yourBean.yourMethod()}"/>