Java 使用validate()时客户端验证不起作用

Java 使用validate()时客户端验证不起作用,java,struts2,Java,Struts2,我在validate()方法中进行验证 并且在jsp(视图)中添加了表单属性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:text

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

并且在jsp(视图)中添加了表单属性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()方法添加客户端验证?

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

在Struts 2中,有不同的含义,完全取决于您使用的验证类型

  • 使用
    XHTML
    (默认)和
    cssxhtml
    ,您可以使用

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

  • 使用
    AJAX
    主题,您可以运行

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


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

    由于服务器端验证是强制性的,因此客户端验证被认为是多余的,有助于使页面更加用户友好,并减少高用户环境中的网络流量(在未成功但合法的请求通过连接之前阻止它们:)


    考虑使用支持jQuery的HTML5类型,特别是当您以手机为目标时。

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

    • 带验证的表单
    • 带有自定义验证的表单

    您可能更感兴趣的例子是没有AJAX的表单提交

    有一种方法,尽管不是我喜欢的方法。请阅读下面的内容details@Andrea您完全正确,但我的意思是您可以从客户端调用ajax,但它将在服务器端调用,并且您将进行服务器端验证。同样的行为可以通过多种方式实现。
    ajax
    theme已被弃用,并且它没有随S2最新的JAR一起提供。@Andrea那么我如何在上面给出的程序中实现它呢。@AleksandrM哇,我认为它很旧,但不知道(或记得)它已被弃用。顺便说一句,这是件好事。@tanmoy:没有其他现成的框架方法可以使用服务器端代码执行客户端验证。然后,您可以只使用服务器端,或者编写自己的客户端,用javascript复制java逻辑。如果您的需求是严格的,您的项目足够大,并且该架构将在未来的其他项目中重用,您还可以考虑自己编写一个自定义Ajax主题,这是一个更新的、基于JQuery的Dojo Ajax主题的自定义版本。
    <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>