【问题标题】:validation of multiple fields in jsf 1.xjsf 1.x 中多个字段的验证
【发布时间】:2011-10-30 15:13:48
【问题描述】:

我需要验证表单中的多个字段,单个字段验证工作正常。 我想知道是否所有字段都是空的,jsf 1.x 和richfaces 3.3 有什么方法可以显示一条消息,例如“所有字段都是必需的”,而不是每个验证消息

【问题讨论】:

    标签: validation jsf richfaces


    【解决方案1】:

    您可以拥有一个包含所有错误消息的列表,并且该列表会在提交时填充。

    示例:

        public String doBid() {
         boolean flag=false;
        errorMessages = new ArrayList<String>();
        if (getUserID().equals("")) {
       flag=true;
        }
        if (getKeyword().equals("")) {
         flag=true;
        }
        if (getNumericBidAmount() == 0.00) {
        flag=true;
        }
        if (getNumericBidDuration() =0) {
         flag=true;
    
        }
         if (flag==true)
             errorMessages.add("all fields are mandatory");
        if (errorMessages.size() > 0) {
        return(null);
        } else {
        return("success");
        }
        14 }
    
    
        ---------
    
        public String getErrorMessages() {
        String messageList;
        if ((errorMessages == null) ||
        (errorMessages.size() == 0)) {
        messageList = "";
        } else {
        messageList = "<FONT COLOR=RED><B><UL>\n";
        for(String message: errorMessages) {
        messageList = messageList + "<LI>" + message + "\n";
        }
        messageList = messageList + "</UL></B></FONT>\n";
        }
        return(messageList);
        }
    
        --------------------
        <h:form>
        <h:outputText value="#{bidBean1.errorMessages}"
        escape="false"/>
        <TABLE>
        <TR>
        <TD>User ID:
        <h:inputText value="#{bidBean1.userID}"/></TD></TR>
        <TR>
        <TD>Keyword:
        <h:inputText value="#{bidBean1.keyword}"/></TD></TR>
        <TR>
        <TD>Bid Amount:
        $<h:inputText value="#{bidBean1.bidAmount}"/></TD></TR>
        <TR>
        <TD>Duration:
        <h:inputText value="#{bidBean1.bidDuration}"/></TD></TR>
        <TR><TH>
        <h:commandButton value="Send Bid!"
        action="#{bidBean1.doBid}"/></TH></TR>
        </TABLE>
        </h:form>
    

    【讨论】:

    • 我正在通过使用验证器方法在前端设置验证器属性来进行单字段验证。我可以用验证器方法实现你的逻辑吗?
    【解决方案2】:

    我正在使用 MyFaces Extensions Validator + 一个带有 ProcessedInformationRecorder 的简单插件来完成您所说的操作。

    【讨论】:

    • 感谢您的回复...您能给出一些示例代码吗?
    • 不幸的是,它已深度集成在我们的组件库中。但这不应该那么难。只需查看他们的源代码以及该库如何在内部使用 ProcessedInformationRecorder 进行交叉验证。只需使用自定义标记注释收集所有值并将其添加到上下文(或您自己的上下文)中,然后在阶段侦听器中(在验证阶段之后)检查上下文,添加消息并调用 FC.renderResponse。恕我直言,他们的邮件列表也是一个很好的信息来源,如果你被卡住或者你看不到整个东西是如何工作的。但这应该不难。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-14
    • 1970-01-01
    相关资源
    最近更新 更多