Validation JSF验证在行动阶段
我们有一个基于JSF的web应用程序,它将输入表单数据提交给web服务,然后显示web服务提供的响应 是web服务验证用户输入的输入数据。我不确定如何使用这里的Validation JSF验证在行动阶段,validation,jsf,Validation,Jsf,我们有一个基于JSF的web应用程序,它将输入表单数据提交给web服务,然后显示web服务提供的响应 是web服务验证用户输入的输入数据。我不确定如何使用这里的JSF验证。据我所知,JSF验证视图中的各个组件。但是每次发出一个web服务请求将是非常昂贵的操作 相反,当用户提交表单时,我们跳过所有验证,在action方法中发出web服务请求。根据web服务的响应,我们是否可以通过编程判断特定的UI组件无效 你能就此提出你的建议吗 环境:- JSF 2.0 WebSphere Application
JSF验证。据我所知,JSF验证视图中的各个组件。但是每次发出一个web服务请求将是非常昂贵的操作
相反,当用户提交表单时,我们跳过所有验证,在action方法中发出web服务请求。根据web服务的响应,我们是否可以通过编程判断特定的UI组件无效
你能就此提出你的建议吗
环境:-
JSF 2.0
WebSphere Application Server 8.5
请参阅“手动验证”部分
这可能就是你想要实现的目标
手动验证
- 为bean使用字符串属性(使用try/catch块处理非法数据)
- 在setter方法和/或动作控制器中进行验证
- 返回null以重新显示表单
- 创建自定义错误消息并存储在FacesMessage中
- 使用h:messages显示错误消息列表(如果没有消息,则不会输出任何内容)
例如,在bean中:
public void setBidAmount(String bidAmount) {
this.bidAmount = bidAmount;
try {
numericBidAmount = Double.parseDouble(bidAmount);
} catch(NumberFormatException nfe) {}
}
行动方法:
public String doBid() {
FacesContext context = FacesContext.getCurrentInstance();
if (getNumericBidAmount() <= 0.10) {
context.addMessage(null,
new FacesMessage("Bid amount must be at least $0.10."));
}
...
if (context.getMessageList().size() > 0) {
return(null);
} else {
doBusinessLogicForValidData();
return("show-bid1");
}
}
公共字符串doBid(){
FacesContext context=FacesContext.getCurrentInstance();
如果(getNumericBidAmount()0){
返回(空);
}否则{
doBusinessLogicForValidData();
退货(“show-bid1”);
}
}
根据web服务的响应,我们是否可以通过编程判断特定的UI组件无效
是的,您可以通过调用并传递false
来实现。以下是完整的部分:
FacesContext context = FacesContext.getCurrentInstance();
UIInput input = (UIInput) context.getViewRoot().findComponent("form:input");
input.setValid(false);
context.addMessage(input.getClientId(context), message);
context.validationFailed();
顺便说一句,FacesContext#validationFailed()
不需要按每个输入调用。这并不是OP具体要求的。只需一个快速评论。我找不到context.setValidationFailed(布尔值),而是context.setValidationFailed()。@BalusC为什么需要调用context.validationFailed()
?@Geek:出于注意中提到的确切原因,当抛出带有消息的Validator异常时,此操作已隐式完成,但当您手动设置消息时,此消息不会以任何方式通知JSF验证失败。@BalusC我们使用的是JSF 1.2。编译器找不到FacesContext#validationFailed()
。JSF1.2实现这一点的方法是什么?@BalusC您在评论中说“……当您手动设置消息时,会抛出消息,但不会以任何方式通知JSF验证失败。”,我还看到了,但不是input.setValid(false)代码>足够吗?提前谢谢