2016-04-29 3 views
0

データを表示するには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> 
+0

あなたの質問は混乱しています。検証エラーメッセージが表示されるはずの ' 'はどこにありますか? – BalusC

+0

@BalusC私はもうあなたの答えでこの問題を解決しました。検証のエラーが ''に表示されることを知りませんでした。私は、サーバが検証エラーを知らせる 'HTTP 400 Bad Request'エラーページを表示することを期待していました。 ''それを解決しました。 –

+0

ああ、最初の質問はあなたの期待を明確にしていませんでした。 – BalusC

答えて

1

それは私だけでビューのparamタグを置き換え...私は時間のためのソリューションを検索し、私は20分、この質問をした後、それを見つける方法を

信じられないです:

<o:viewParam name="test" value="#{requiredTestBean.value}" required="true"> 
    <o:viewParamValidationFailed sendError="400" /> 
</o:viewParam> 

そして、それは完全に働いた。

参考:https://stackoverflow.com/a/29841384/804976