2

私は多くのページに含めるヘッダーにこのボタンがあります:

<input type="button" value="My Button" onclick="window.location.href='mypage.xhtml'"

相対パスを使用し、呼び出し元のページが同じディレクトリにある場合に機能します。絶対パスを使用したり、commandButtonタグを使用したりするにはどうすればよいですか?私は試してみました:

/mypage.xhtml

動作しない(404エラー)

4

2 に答える 2

5

ELにコンテキストパスを動的に出力させます。ドメインルートを基準にしたものになります。

<input type="button" value="My Button" onclick="window.location.href='#{request.contextPath}/mypage.xhtml'">

<h:button>または、コンテキストパスについて心配する必要がない、とにかく同じHTMLを生成するJSF独自のコンポーネントを使用することをお勧めします。

<h:button value="My Button" outcome="/mypage.xhtml" />

リクエストパラメータを渡す必要がある場合は<f:param>、そのために使用できます。

<h:button value="My Button" outcome="/mypage.xhtml">
    <f:param name="foo" value="bar" />
</h:button>

は使用しないでください<h:commandButton>。通常のGETリクエストは送信しませんが、リダイレクトする必要のあるPOSTリクエストを送信するため、事実上2つのHTTPリクエストが送信され、2番目のリクエストではすべてのリクエストパラメータが失われます。

于 2012-05-21T18:07:09.223 に答える
1

したがって、JSF commandButtonを使用してプロジェクト内のあるページに移動する場合は、action属性を使用する必要があり、パラメーターを渡すこともできます。

<h:commandButton action="/details.jsf?faces-redirect=true" value="details">
    <f:attribute name="id" value="#{bean.id}" />
</h:commandButton>

アプリの外部のページに移動する場合は、バッキングBeanのどこかにJavaコードを追加して、フロントエンドからトリガーする必要があります。

FacesContext.getCurrentInstance().getExternalContext().redirect("http://google.com";);

注:このタスクにはJavaScriptは必要ありません

于 2012-05-21T18:24:58.983 に答える