繁体   English   中英

行动阶段的JSF验证

[英]JSF validation in action phase

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

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

相反,当用户提交表单时,我们将跳过所有验证,并在action方法中提出Web服务请求。 基于Web服务的响应,我们可以以编程方式判断特定的UI组件无效吗?

您能对此提供您的建议吗?

环境:-

JSF 2.0
WebSphere Application Server 8.5

基于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()

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

这可能就是您要完成的工作。

手动验证

  • 对bean使用字符串属性(使用try / catch块来处理非法数据)
  • 在设置器方法和/或动作控制器中进行验证
  • 返回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");
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM