JavaScripthistory.back()
関数を使用すると、予想どおりに前のビューではなく、前の同期リクエストに移動します。
この方法はひどいですhistory.back()
が(信頼性が低い、ハッキング可能など)、迅速な解決策は、同期リクエストではなく、フォーム送信時にajaxリクエストを送信することです。
<h:form>
...
<h:commandButton value="submit">
<f:ajax execute="@form" render="@form" />
</h:commandButton>
</h:form>
Ajaxリクエストはブラウザの履歴としては考慮されません。
より堅牢な方法は、ナビゲーション中に前のビューの識別子を渡し、それを使用<h:link>
してリンクを戻すことです。例えば
<h:link value="Go to next view" outcome="nextview">
<f:param name="from" value="#{view.viewId}" />
<h:link>
そして、nextview.xhtml
<f:metadata>
<f:viewParam name="from" />
</f:metadata>
...
<h:link ... outcome="#{from}" rendered="#{not empty from}">
<h:graphicImage ... />
</h:link>
POSTでナビゲートしている場合は、フラッシュスコープを使用して初期ビューを記憶することを検討してください。
具体的な問題とは関係なく、JSF2リソースで使用する適切な方法は<h:graphicImage>
、単純に不器用な属性でname
はなく、そのvalue
属性を使用することです。#{resource}
交換
<h:graphicImage width="90" height="28" value="#{resource['images:blu_btnCancel.png']}" />
に
<h:graphicImage name="images/blu_btnCancel.png" width="90" height="28" />
ここでは、ライブラリ名images
がパス名に置き換えられていることに注意してください。ライブラリ名としての「画像」という名前の使用は非常に疑わしいものです。JSFリソースライブラリとは何ですか?また、どのように使用する必要がありますか?も参照してください。