2013-02-22 13 views
5

JSFの新機能で、アクションと結果の属性の違いを理解しようとしていますか?これは、ボタンとコマンドボタンの違いではなく、同じボタンタグの結果とアクションの属性の間にあります。例えばJSFアクションと結果の属性

、私が持つことができます。

<h:button value="Go" outcome="<value>" /> 

または

<h:button value="Go" action="<value>" /> 

私はどちらを使用する際にはよく分かりません。また、<value><#{bean.methodThatReturnsStringInNavigationRule}>または<string literal in navigation rule>の場合は違いがありますか?

ありがとうございます。

+1

通常、ボタンはナビゲーションに使用され、コマンドボタンは通常ビジネスアクション(および必要に応じてナビゲーション)の実行に使用されます。 – skuntsel

+1

更新プログラムごとに、同じタグに両方の属性を持つJSFコンポーネントはありません。 ''は 'action'属性をまったくサポートしていません。 'action'属性は' 'でのみサポートされています。 – BalusC

+0

この質問のタイトルは今すぐもっと簡単に見つけることができます。私はそれがもう重複とみなされるべきだとは思わない。 – bjedrzejewski

答えて

10

違いアクションを実行するサーバーメソッドを定義しながら、結果がページの先となるビューIDを指定することです。達成しようとしている目標に応じて、JSF入力を使用する必要があります。

  • <h:button outcome="user-management">は、ユーザー管理ページをターゲットにしています。それをリンクの一種と想像してみてください。あなたのアクションメソッドに「ユーザー管理」を返す場合
  • <h:commandButton action="#{backingBean.goToUserManagement}"は、結果と同じことをやっているが、それはあなたがサーバー側にいくつかのロジックを実行することができます。これはh:formタグに埋め込まれている必要があります。

<h:button outcome="user-management">または<h:button outcome="#{backingBean.userManagementNavigationResult}">でも、サーバー側のゲッターメソッドが「ユーザー管理」値を返す限り、違いはありません。

+4

''は ''の外で使用できますが、 ''は使用できません。 –

+0

また、**アクション**は必ずしもBeanメソッドに依存しませんが、そうでない場合は、なぜ ''を使用しないのですか? – skuntsel

+0

ありがとうございます。結果の順列についてはどうでしょうか?#{backing-bean}? – dev

3

JSF 2.0 APIが表示されている場合は、<h:button>タグにはactionという属性はありません。 <h:button>は、JSF 2.0の新しいタグです。 outcome属性でナビゲーション結果を直接宣言できます。<h:commandButton>のような結果を返すためにBeanを呼び出す必要はありません。

JavaScriptを無効にしているブラウザでは、「h:button」タグがwindow.location.hrefでナビゲーションを処理する「onclick」イベントを生成するため、ナビゲーションが失敗します。

<h:button value="buton" outcome="login" />   

// HTML出力

<input type="button" 
     onclick="window.location.href='/ContextRoot/faces/login.xhtml; return false;" 
     value="buton" /> 

出典:mkyong。あなたがまともな例を見つけることができる私のお気に入りのウェブサイト。

JSF用の優れたブログ:BalusCこのフォーラムでは多くの人々に英雄が:)。

関連する問題