JSF 2では、h:button
とh:commandButton
の違いは何ですか?
<h:button>
<h:button>
はHTML <input type="button">
を生成します。生成された要素は、JavaScriptを使用して、HTTP GETリクエストを使用して、属性outcome
で指定されたページに移動します。
例えば。
<h:button value="GET button" outcome="otherpage" />
生成します
<input type="button" onclick="window.location.href='/contextpath/otherpage.xhtml'; return false;" value="GET button" />
これにより、ブラウザのアドレスバーで(ブックマーク可能な)URLが変更されますが、これはSEOフレンドリーではありません。 Searchbotはonclick
のURLを追跡しません。特定のURLでSEOが重要な場合は、<h:outputLink>
または<h:link>
を使用することをお勧めします。必要に応じて、生成されたHTML <a>
要素にCSSをスローして、ボタンのように見せることができます。
以下のように、メソッドを参照するEL式をoutcome
属性に配置できますが、
<h:button value="GET button" outcome="#{bean.getOutcome()}" />
ボタンをクリックするとnot呼び出されません。代わりに、生成されたonclick
コードに埋め込まれるナビゲーション結果を取得するためだけに、ボタンを含むページがレンダリングされるときに既に呼び出されています。 outcome="#{bean.action}"
のようなアクションメソッドの構文を使用しようとした場合、 javax.el.ELException:クラスcom.example.BeanでプロパティactionMethodが見つかりませんでした。 。
POSTリクエストの結果としてメソッドを呼び出す場合は、代わりに<h:commandButton>
を使用してください。以下を参照してください。または、GETリクエストの結果としてメソッドを呼び出す場合は、 ページ読み込みでJSFマネージドBeanアクションを呼び出す 、または<f:param>
を介してGETリクエストパラメータがある場合、 ページの読み込み時にバッキングBeanのGETクエリ文字列URLパラメータを処理するにはどうすればよいですか?
<h:commandButton>
<h:commandButton>
は、デフォルトで親<input type="submit">
を送信するHTML <h:form>
ボタンを生成します。これは、HTTP POSTメソッドを使用して、action
、actionListener
および/または<f:ajax listener>
にアタッチされたアクションを呼び出します。 <h:form>
が必要です。
例えば。
<h:form id="form">
<h:commandButton id="button" value="POST button" action="otherpage" />
</h:form>
生成します
<form id="form" name="form" method="post" action="/contextpath/currentpage.xhtml" enctype="application/x-www-form-urlencoded">
<input type="hidden" name="form" value="form" />
<input type="submit" name="form:button" value="POST button" />
<input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="...." autocomplete="off" />
</form>
したがって、現在のページに送信されることに注意してください(フォームアクションURLはブラウザのアドレスバーに表示されます)。その後、ブラウザのアドレスバーのURLを変更せずに、ターゲットページにforwardします。 ?faces-redirect=true
パラメーターを結果値に追加して、POST( Post-Redirect-Getパターン に従って)の後にリダイレクトをトリガーして、ターゲットURLをブックマーク可能にすることができます。
<h:commandButton>
は通常、ページ間のナビゲーションを実行するためではなく、POSTフォームを送信するためにのみ使用されます。通常、action
は、フォームデータをDBに保存するなど、String
の結果を返すビジネスアクションを指します。
<h:commandButton ... action="#{bean.save}" />
と
public String save() {
// ...
return "otherpage";
}
null
またはvoid
を返すと、同じビューに戻ります。空の文字列も返しますが、ビュースコープBeanを再作成します。最近のJSF2と<f:ajax>
では、多くの場合、アクションは同じビュー(つまり、null
またはvoid
)に戻るだけで、結果はajaxによって条件付きでレンダリングされます。
public void save() {
// ...
}
h:button
-h:button
をクリックすると、ブックマーク可能なGET
リクエストが発行されます。
h:commandbutton
-getリクエストの代わりに、h:commandbutton
はPOSTリクエストを発行し、フォームデータをサーバーに送り返します。
h:commandButtonはh:formで囲む必要があり、ナビゲーションの2つの方法があります。つまり、action属性を設定することによる静的と、actionListener属性を設定することによる動的です。
<h:form>
<h:commandButton action="page.xhtml" value="cmdButton"/>
</h:form>
このコードは次のhtmlを生成します。
<form id="j_idt7" name="j_idt7" method="post" action="/jsf/faces/index.xhtml" enctype="application/x-www-form-urlencoded">
一方、h:ボタンはよりシンプルで、次のように静的またはルールベースのナビゲーションに使用されます
<h:button outcome="page.xhtml" value="button"/>
生成されたhtmlは
<title>Facelet Title</title></head><body><input type="button" onclick="window.location.href='/jsf/faces/page.xhtml'; return false;" value="button" />
これは本から取られています-エド・バーンズとクリス・シャルクによる完全なリファレンス
h:commandButton vs h:button
h:commandButton | h:commandLinkとh:button | h:linkの違いは何ですか?
後者の2つのコンポーネントは、2.0
で導入され、ビューパラメーター機能と組み合わせて使用した場合、ブックマーク可能なJSFページを有効にします。
h:button | h:linkとh:commandButton | h:commandLinkには3つの主な違いがあります。
まず、
h:button|h:link
はブラウザにHTTP GETリクエストを発行させ、h:commandButton|h:commandLink
はフォームPOSTを発行させます。つまり、ユーザーが入力した値(テキストフィールド、チェックボックスなど)を持つページ内のコンポーネントは、h:button|h:link
を使用するときにサーバーに自動的に送信されません。h:button|h:link
で値を送信するには、「パラメーターの表示」機能を使用して追加のアクションを実行する必要があります。2種類のコンポーネントの2番目の主な違いは、
h:button|h:link
が次に進むべき場所を説明する結果属性を持ち、h:commandButton|h:commandLink
がこの目的のためにアクション属性を使用することです。これは、前者はイベントシステムでActionEventを生成しないのに対し、後者はイベントシステムを生成するためです。最後に、この機能を完全に理解するために最も重要なのは、
h:button|h:link
コンポーネントにより、ナビゲーションシステムがページのレンダリング中に結果を導き出すように求められ、この質問に対する答えがページ。対照的に、h:commandButton|h:commandLink
コンポーネントにより、ナビゲーションシステムは、ページからPOSTBACKの結果を導き出すように求められます。これはタイミングの違いです。レンダリングは常にPOSTBACKの前に行われます。
commandButton
action
属性について JSF javadocs が言わなければならないことは次のとおりです。
このコンポーネントがユーザーによってアクティブ化されたときに呼び出すアプリケーションアクションを表すMethodExpression。式は、パラメーターを受け取らず、このアプリケーションのNavigationHandlerに渡されるObject(論理結果を導出するために呼び出されるtoString())を返すパブリックメソッドに評価される必要があります。
このページの回答のいずれかと関係があることを誰もが説明できると、私にとっては光り輝くでしょう。 action
がメソッドではなく、あるページのファイル名を参照していることは明らかです。