12

我们有一个基于 JSF 的 Web 应用程序,它将输入表单数据提交给Web 服务,然后显示Web 服务提供的响应。

它是验证用户输入的输入数据的Web 服务。我不确定我们如何使用JSF validation这里。据我了解,JSF 会验证视图中的各个组件。但是每次都发出一个 Web 服务请求将是非常昂贵的操作。

相反,当用户提交表单时,我们会跳过所有验证,在 action 方法中发出 Web 服务请求。根据来自 Web 服务的响应,我们能否以编程方式判断特定 UI 组件无效?

您能否就此提出您的建议?

环境:-

JSF 2.0
WebSphere Application Server 8.5
4

2 回答 2

22

根据来自 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()不需要在每个输入的基础上调用。

于 2012-12-23T16:39:40.383 回答
2

查看本教程- “手动验证”部分。

这可能是你想要完成的。

手动验证

  • 使用 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");
    }
}
于 2012-12-23T16:25:56.057 回答