当我添加required="true"
, 什么都没发生
你需要<h:message(s)>
显示与给定(输入)组件关联的面孔消息。您可能已经知道如何做到这一点<h:inputText>
。你可以做同样的事情<f:viewParam>
.
<f:metadata>
<f:viewParam id="foo" ... required="true" />
</f:metadata>
...
<h:message for="foo" />
如果出现以下情况,我会执行重定向(或错误)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 http://omnifaces.org,那么您可以使用<o:viewParamValidationFailed> http://showcase.omnifaces.org/taghandlers/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>
也可以看看:
- 、 和 可以用来做什么? https://stackoverflow.com/questions/6377798/what-can-fmetadata-and-fviewparam-be-used-for