0

データを表示するために GET パラメータを必要とする JSF 2.2 ページを作成していますが、そのパラメータを適用するのが困難です。

また、 Omnifaces の viewParamを使用しようとしましたが、成功しませんでした。もう何を試したらよいかわかりません。

このリンクでも同様の問題が見つかり、すべての提案を試しました...

私が開いたとき:

  • http://url-to/required-test.xhtml?test=foo

正常に動作し、Param is: foo表示されます。

しかし、私が開いたとき:

  • http://url-to/required-test.xhtml?test=
  • http://url-to/required-test.xhtml

Param is: null!検証エラー メッセージの代わりに表示されます。そしてnull!、このテスト専用の特別な outputText を追加したため、表示されるだけです。実際のアプリケーションでは、どこかで NullPointerException が発生します。

required属性をオン<f:viewParam />または機能させるにはどうすればよい<o:viewParam />ですか?

私のテストコード:

必須-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>

必須TestBean.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のコンテキスト パラメータ

<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>
4

1 に答える 1

1

何時間も解決策を探しているのに、この質問をしてから 20 分後に解決策を見つけるなんて信じられないことです...

ビュー パラメータ タグを次のように置き換えました。

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

そして、それは完璧に機能しました。

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

于 2016-04-29T16:46:22.097 に答える