h:buttonとh:commandButtonの相違点
質問
JSF 2では、以下の違いは何ですか?
h:button
と
h:commandButton
?
どのように解決するのですか?
<h:button>
その
<h:button>
は HTML の
<input type="button">
. 生成された要素は、JavaScript を使って、属性
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的に不利です。検索ボットは
onclick
. を使用した方が良いでしょう。
<h:outputLink>
または
<h:link>
といった具合に、SEOが重要な場合は、指定されたURLの上に記述します。必要であれば、生成された HTML にいくつかの CSS を投げ込むことができます。
<a>
要素に CSS を適用して、ボタンのように見せることもできます。
メソッドを参照するEL式は
outcome
属性に記述することができます.
<h:button value="GET button" outcome="#{bean.getOutcome()}" />
それは
ではない
はボタンをクリックしたときに呼び出されます。その代わり、ボタンを含むページがレンダリングされるときにすでに呼び出され、その目的は生成された
onclick
コードに埋め込まれるナビゲーションの結果を得るためです。のようなアクションメソッドの構文を使おうとしたことがある場合、それは
outcome="#{bean.action}"
のようにアクションメソッドの構文を使おうとすると、すでにこの間違い/誤解を示唆する
javax.el.ELException: com.example.Bean クラスで actionMethod プロパティが見つかりませんでした。
.
POSTリクエストの結果としてメソッドを呼び出したい場合は
<h:commandButton>
を使ってください。また、GET リクエストの結果としてメソッドを呼び出す場合は、次のようにします。
ページロード時にJSFマネージドビーンのアクションを呼び出す
または、GETリクエストのパラメータを
<f:param>
,
ページロード時にバッキングビーンのGETクエリ文字列URLパラメータを処理するにはどうすればよいですか?
<h:commandButton>
その
<h:commandButton>
は HTML の
<input type="submit">
ボタンを生成し、デフォルトで親
<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は変更されません。あなたは
?faces-redirect=true
パラメータを追加して、POST 後のリダイレクトをトリガーすることもできます (例.
Post-Redirect-Get パターン
のように)POST後にリダイレクトを行い、ターゲットURLがブックマーク可能になるようにします。
は
<h:commandButton>
は通常 POST フォームの送信にのみ使用され、ページ間の移動には使用されません。通常
action
は、フォームのデータを DB に保存するようなビジネスアクションを指し、そのアクションは
String
の結果を返します。
<h:commandButton ... action="#{bean.save}" />
で
public String save() {
// ...
return "otherpage";
}
戻る
null
または
void
を実行すると、同じビューに戻ります。空の文字列を返しても、任意のビュースコープされたビーンを再作成してしまいます。最近では、最新の JSF2 と
<f:ajax>
を使用すると、より多くの場合、アクションは単に同じビューに戻ります (したがって
null
または
void
) で、結果は ajax によって条件付きでレンダリングされます。
public void save() {
// ...
}
こちらもご覧ください。
関連
-
[解決済み] リンクのように動作するHTMLボタンを作成する方法
-
[解決済み] actionとactionListenerの違い
-
[解決済み】JSF、Servlet、JSPの違いは何ですか?
-
[解決済み】JSFリソースライブラリは何のためにあり、どのように使用すべきですか?
-
[解決済み】Java Server Faces 2.0の主なデメリットは何ですか?
-
[解決済み] JSF2 FaceletsでJSTL...意味があるのか?
-
[解決済み] javax.el.PropertyNotFoundException の識別と解決。ターゲットに到達できない
-
[解決済み] Backing Bean (@ManagedBean) か CDI Beans (@Named) か?
-
[解決済み] JSFのページで、改行されないスペース文字を挿入するには?
-
JSFで'binding'属性はどのように機能するのですか?いつ、どのように使うべきですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] javax.faces.application.ViewExpiredException: ビューを復元できませんでした
-
[解決済み] actionとactionListenerの違い
-
[解決済み] ビーンスコープを正しく選ぶには?
-
[解決済み] commandButton/commandLink/ajax アクション/リスナーメソッドが呼び出されないか、入力値が設定/更新されない。
-
[解決済み】JSF 2.0 Faceletsを使用してXHTMLに別のXHTMLを含めるにはどうすればよいですか?
-
[解決済み] <f:metadata>、<f:viewParam>、<f:viewAction>は何に使えるのでしょうか?
-
[解決済み] h:commandLinkの代わりにh:outputLinkを使うべきですか?
-
[解決済み] サーブレット関連クラスでJSFマネージドBeanを名前付きで取得する
-
[解決済み] JSF2におけるfaces-config.xmlの用途は何ですか?
-
[解決済み] JSFのコンポーネントを条件付きで表示する