我们有一个基于JSF的Web应用程序,它将输入表单数据提交给 Web服务,然后显示 Web服务提供的响应。
Web服务验证用户输入的输入数据。我不确定我们如何在这里使用JSF validation
。根据我的理解,JSF验证视图中的各个组件。但每次发出Web服务请求都会非常昂贵。
相反,当用户提交表单时,我们会跳过所有验证,在action方法中发出Web服务请求。根据Web服务的响应,我们可以通过编程方式告知特定的UI组件是无效的吗?
请您就此提出建议吗?
环境: -
JSF 2.0
WebSphere Application Server 8.5
答案 0 :(得分:18)
根据来自Web服务的响应,我们能否以编程方式告知特定UI组件无效?
是的,你可以通过调用UIInput#setValid()
,传递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()
不需要按输入调用。
答案 1 :(得分:2)
查看this tutorial - “手动验证”部分。
这可能是你想要完成的事情。
手动验证
例如在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");
}
}