如果af:viewParam为空,则重定向

zer*_*erg 4 error-handling jsf redirect viewparams jsf-2.2

如果a f:viewParam为空,我会进行重定向(或错误)吗?

<f:metadata>
    <f:viewParam name="accountId" value="#{accountMB.id}"/>
</f:metadata>
Run Code Online (Sandbox Code Playgroud)

当我添加时required="true",没有任何反应.有什么选择?

Bal*_*usC 8

当我添加时required="true",没有任何反应

您需要<h:message(s)>显示与给定(输入)组件关联的面部消息.你可能已经知道如何做到这一点<h:inputText>.你可以做同样的事情<f:viewParam>.

<f:metadata>
    <f:viewParam id="foo" ... required="true" />
</f:metadata>
...
<h:message for="foo" />
Run Code Online (Sandbox Code Playgroud)

如果a f:viewParam为空,我会进行重定向(或错误)吗?

不直接使用标准的JSF验证工具.您需要手动完成这项工作<f:viewAction>(您需要确保没有任何验证器/转换器,否则由于验证/转换错误而无法调用;您也可以使用<f:event type="preRenderView">).

<f:metadata>
    <f:viewParam value="#{bean.foo}" />
    <f:viewAction action="#{bean.checkFoo}" />
</f:metadata>
Run Code Online (Sandbox Code Playgroud)

public String checkFoo() {
    if (foo == null || foo.isEmpty()) {
        return "some.xhtml"; // Redirect to that page.
    } else {
        return null; // Stay on current page.
    }
}
Run Code Online (Sandbox Code Playgroud)

发送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();
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您碰巧使用了JSF实用程序库OmniFaces,那么您可以将<o:viewParamValidationFailed>标记用于此目的而无需额外的辅助bean逻辑.

在视图参数验证上发送重定向失败:

<f:metadata>
    <f:viewParam ... required="true">
        <o:viewParamValidationFailed sendRedirect="some.xhtml" />
    </f:viewParam>
</f:metadata>
Run Code Online (Sandbox Code Playgroud)

在视图参数验证上发送HTTP 400错误失败:

<f:metadata>
    <f:viewParam ... required="true">
        <o:viewParamValidationFailed sendError="400" />
    </f:viewParam>
</f:metadata>
Run Code Online (Sandbox Code Playgroud)

也可以看看: