【问题标题】:AJAX onSubmit validation in JSF 2.0JSF 2.0 中的 AJAX onSubmit 验证
【发布时间】:2012-04-01 01:38:18
【问题描述】:

我开始学习JSF2.0,遇到了一个问题。欢迎任何有关如何进行的建议。

为简单起见,我已重命名表单元素和类。

我有一个表格,例如:

<h:form id="frmSearch">
    <h:inputText id="dataPoint1" value="#{bean.dataPoint1}"/>
    <div id="dataPoint1Error" class="msgError">Value not found in database.</div>

    <h:inputText id="dataPoint2" value="#{bean.dataPoint2}"/>
    <div id="dataPoint2Error" class="msgError">Value not found in database.</div>

    <h:commandButton action="#{bean.validate}" type="submit" value="Search"/>
</h:form>

CSS 类“msgError”默认隐藏元素。

我想基本上在“bean”类中有一个方法,通过检查数据库来验证输入,然后如果找不到该值,则取消隐藏错误消息,或者如果找到,则执行另一个执行实际功能的方法。

在我的脑海中,它在 Java 中的工作方式有点像这样(请原谅任何语法错误,只是按我的想法输入):

@ManagedBean
public class Bean {
    private String dataPoint1 = "";
    private String dataPoint2 = "";

    public boolean validate() {
        if(dao.fieldExists(this.dataPoint1) && dao.fieldExists(this.dataPoint2)) { //check the database
            performFunctionality();
            return true;
        }
        else {
            return false; //and show error div on screen
        }
    }        

    public void performFunctionality() {
        //do whatever
    }

    //getters and setters
}

非常欢迎任何建议! 谢谢!

【问题讨论】:

    标签: ajax validation jsf-2


    【解决方案1】:

    您没有使用 JSF 内置的验证工具。好好利用吧。

    它的外观如下:

    <h:form id="frmSearch">
        <h:inputText id="dataPoint1" value="#{bean.dataPoint1}" validator="#{bean.validateDataPoint}" />
        <h:message for="dataPoint1" />
    
        <h:inputText id="dataPoint2" value="#{bean.dataPoint2}" validator="#{bean.validateDataPoint}" />
        <h:message for="dataPoint2" />
    
        <h:commandButton action="#{bean.performFunctionality}" value="Search">
            <f:ajax execute="@form" render="@form" />
        </h:commandButton>
    </h:form>
    

    public void validateDataPoint(FacesContext context, UIComponent component, Object convertedValue) {
        if (!dao.fieldExists((String) convertedValue)) {
            throw new ValidatorException(new FacesMessage("Value not found in database."));
        }
    }        
    

    那个performFunctionality()必须由命令按钮的action方法执行。

    当验证失败时(即抛出ValidatorException),则消息将显示在与输入组件关联的&lt;h:message&gt;中,并且不会调用操作方法。 validator 属性也可以指向实现javax.faces.validator.Validator 的完全有价值的类。添加了&lt;f:ajax&gt; 以使其成为ajax 提交。

    另见:

    无论您在哪里学习过 JSF,请确保您还阅读了有关转换和验证的章节。不要想太多 PHP/ASP/JSP/jQuery 的方式。 JSF 是一个成熟的基于组件的 MVC 框架。

    【讨论】:

    • 太棒了,谢谢。我实际上在这里学到了一些东西,而不仅仅是解决了一个问题。非常感谢。
    • "不要想太多 PHP/ASP/JSP/jQuery 的方式。"这正是我的问题。
    猜你喜欢
    • 1970-01-01
    • 2011-04-16
    • 1970-01-01
    • 2012-01-30
    • 2012-02-23
    • 1970-01-01
    • 2011-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多