af:viewParam
が空の場合、リダイレクト (またはエラー) を実行できますか?
<f:metadata>
<f:viewParam name="accountId" value="#{accountMB.id}"/>
</f:metadata>
を追加required="true"
しても何も起こりません。オプションは何ですか?
af:viewParam
が空の場合、リダイレクト (またはエラー) を実行できますか?
<f:metadata>
<f:viewParam name="accountId" value="#{accountMB.id}"/>
</f:metadata>
を追加required="true"
しても何も起こりません。オプションは何ですか?
を追加
required="true"
しても何も起こりません
<h:message(s)>
特定の (入力) コンポーネントに関連付けられた顔メッセージを表示する必要があります。でそれを行う方法はすでにご存知でしょう<h:inputText>
。についてもまったく同じことができます<f:viewParam>
。
<f:metadata>
<f:viewParam id="foo" ... required="true" />
</f:metadata>
...
<h:message for="foo" />
a
f:viewParam
が空の場合、リダイレクト (またはエラー) を実行できますか?
標準の JSF 検証機能を直接使用するわけではありません。手動でジョブを実行する<f:viewAction>
必要があります (バリデーター/コンバーターがないことを確認する必要があります。そうしないと、検証/変換エラーのために呼び出されません。代わりに を使用できます<f:event type="preRenderView">
)。
<f:metadata>
<f:viewParam value="#{bean.foo}" />
<f:viewAction action="#{bean.checkFoo}" />
</f:metadata>
public String checkFoo() {
if (foo == null || foo.isEmpty()) {
return "some.xhtml"; // Redirect to that page.
} else {
return null; // Stay on current page.
}
}
HTTP エラーの送信は以下のように行うことができます (この例では HTTP 400 エラーが送信されます)。
public void checkFoo() {
if (foo == null || foo.isEmpty()) {
FacesContext context = Facescontext.getCurrentInstance();
context.getExternalContext().responseSendError(400, "Foo parameter is required");
context.responseComplete();
}
}
JSF ユーティリティ ライブラリOmniFaces<o:viewParamValidationFailed>
を使用する場合は、追加のバッキング Bean ロジックを必要とせずに、まさにその目的のためにタグを使用できます。
ビュー パラメータの検証でリダイレクトを送信すると失敗します:
<f:metadata>
<f:viewParam ... required="true">
<o:viewParamValidationFailed sendRedirect="some.xhtml" />
</f:viewParam>
</f:metadata>
ビュー パラメーターの検証に失敗したときに HTTP 400 エラーを送信する:
<f:metadata>
<f:viewParam ... required="true">
<o:viewParamValidationFailed sendError="400" />
</f:viewParam>
</f:metadata>
ページにフィルターを追加できます ( Filtering requests ):
@WebFilter(filterName = "MyFilter")
public class MyFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
if (request.getParameterMap().get("accountId") == null){
// do redirect
return;
}
chain.doFilter(request, response);
}
}
また、web.xml ファイルでフィルターを宣言することを忘れないでください。
<filter>
<filter-name>MyFilter</filter-name>
<filter-class>my.filter.classpath.MyFilterclass</filter-class>
</filter>
<filter-mapping>
<filter-name>MyFilter</filter-name>
<url-pattern>/url/to/my/page.xhtml</url-pattern>
</filter-mapping>
また、フィルターを使用する場合は、リダイレクトよりもフォワードを使用することをお勧めします。