【问题标题】:Client side validation not working using validate()客户端验证无法使用 validate()
【发布时间】:2015-01-09 09:24:37
【问题描述】:

我正在 validate() 方法中进行验证。

public void validate(){
    if(continent.equals("-1")){
        HttpServletRequest request=ServletActionContext.getRequest();  
        HttpSession session=request.getSession();  
        String s=(String)session.getAttribute("operation");
        if(s.equals("edit"))
                edit();
        else if(s.equals("add"))
                add();
        addFieldError( "Continent", "Continent must be selected");
    }
}

并且在 jsp(view) 中添加了表单属性 validate=true

<s:form action="add" name="aaa" cssClass="yy" method="post" validate="true">
        <s:textfield name="Code" label="Code" readonly="false" cssClass="defaultTextBox"/>
        <s:textfield name="Name" label="Name" cssClass="defaultTextBox"/>
        <s:select name="Continent" label="Continent" headerKey="-1" headerValue="Select" list="continentlist" cssClass="defaultTextBox"/>
        <s:textfield name="IndepYear" label="Independance Year" cssClass="defaultTextBox" />
        <s:submit value="Save" cssClass="login login-submit" theme="simple"/>
</s:form>

但只有服务器端验证有效。我的问题是 --> 不能使用 validate() 方法添加客户端验证吗?

【问题讨论】:

    标签: java struts2


    【解决方案1】:

    在 Struts 2 中,Client Side Validation 有不同的含义,完全取决于你使用的theme 的类型。

    1. 使用XHTML(默认)和CSS XHTML,您可以使用

      这完全是客户端,基于 Javascript,不与服务器通信。

    2. 使用AJAX 主题,您可以运行

      这将联系服务器,运行整个验证堆栈,并(回答您的问题)也运行您的 validate() 方法。


    我个人更喜欢使用 SIMPLE 主题,完全自己处理 HTML、CSS 和 JavaScript。

    由于服务器端验证是强制性的,客户端验证被认为只是一个多余的,积极的使页面更加用户友好,并减少高用户环境中的网络流量(你阻止不成功 -但合法 - 在他们通过电线之前提出请求:)

    考虑在 jQuery 上使用 HTML5 类型并回退,特别是如果您的目标是移动设备。

    【讨论】:

    • ajax 主题已弃用,并且未随 S2 最新 jars 一起提供。
    • @Andrea 那么如何在上面给出的程序中实现它。
    • @AleksandrM 哇,我认为它很旧,但不知道(或记得)它已被弃用。这是一件好事,顺便说一句。
    • @tanmoy:没有其他框架开箱即用的方法可以使用您的服务器端代码执行客户端验证。然后你可以只使用服务器端,或者编写你自己的客户端,在 javascript 中复制你的 java 逻辑。如果你的要求比较严格,你的项目足够大,并且架构以后会在其他项目中复用,你也可以考虑自己写一个自定义的AJAX主题,更新的,自定义版本的老dojo AJAX主题,也许基于jQuery。
    【解决方案2】:

    实际上,您不应该混淆服务器端和客户端代码。 validate 方法只能在服务器端调用......所以没有办法在客户端使用这个方法。 您需要编写自己的 JS 端验证,就像服务器端验证一样。

    【讨论】:

    • 有一种方法,虽然不是我喜欢的方法。阅读下文了解详情
    • @Andrea 你是绝对正确的,但我的意思是你可以从客户端进行 ajax 调用,但它将在服务器端调用,并且你将进行服务器端验证。可以通过多种方式实现相同的行为。
    【解决方案3】:

    可以使用 struts2-jquery 插件 使用您的服务器端代码执行 AJAX 验证,如 Showcase 下所示:

    • 表单 带有验证的表单
    • 表格 带有客户验证的表格

    您可能更感兴趣的例子是Form Submit without AJAX

    【讨论】:

      猜你喜欢
      • 2016-01-26
      • 2021-01-01
      • 2014-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-27
      • 2011-10-29
      相关资源
      最近更新 更多