データを表示するにはGETパラメータが必要ですが、そのパラメータを適用するのが難しいJSF 2.2ページを作成しています。<f:viewParam required>が@NotNullプロパティで失敗したときにHTTP 400エラーを送信します。
また、私はOmnifaces's viewParamを成功させずに使用しようとしましたが、もう何を試すべきか分かりません。
私も、私が開いたときにsimilar issue on this linkと私は...
をすべての提案を試してみましたが見つかりました:
-
をそれはParam is: foo
が表示され、正常に動作します。
しかし、私は開く:
http://url-to/required-test.xhtml?test=
http://url-to/required-test.xhtml
Param is: null!
ではなく、検証エラーメッセージの表示されます。 null!
が表示されるのは、このテスト専用の特別なoutputTextを追加したためです。実際のアプリケーションでは、どこかでNullPointerExceptionが発生します。
<f:viewParam />
または<o:viewParam />
の属性をrequired
にするにはどうすればよいですか?
私のテストコード:
必要-test.xhtml
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core" xmlns:o="http://omnifaces.org/ui">
<f:metadata>
<f:viewParam name="test" value="#{requiredTestBean.value}" required="true" />
</f:metadata>
<h:head>
<title>Required Test</title>
</h:head>
<h:body>
Param is:
<h:outputText value="#{requiredTestBean.value}" rendered="#{requiredTestBean.value != null}" />
<h:outputText value="null!" rendered="#{requiredTestBean.value == null}" />
</h:body>
</html>
RequiredTestBean.java
package test;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.validation.constraints.NotNull;
@ManagedBean
@RequestScoped
public class RequiredTestBean
{
@NotNull
private String value;
@NotNull
public String getValue()
{
return value;
}
public void setValue(@NotNull String value)
{
this.value = value;
}
}
web.xmlの
0123上のコンテキストのparams<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<context-param>
<param-name>javax.faces.CLIENT_WINDOW_MODE</param-name>
<param-value>url</param-value>
</context-param>
<context-param>
<param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>javax.faces.VALIDATE_EMPTY_FIELDS</param-name>
<param-value>true</param-value>
</context-param>
あなたの質問は混乱しています。検証エラーメッセージが表示されるはずの ' 'はどこにありますか? –
BalusC
@BalusC私はもうあなたの答えでこの問題を解決しました。検証のエラーが ' 'に表示されることを知りませんでした。私は、サーバが検証エラーを知らせる 'HTTP 400 Bad Request'エラーページを表示することを期待していました。 ' 'それを解決しました。 –
ああ、最初の質問はあなたの期待を明確にしていませんでした。 – BalusC