所有表单数据的AJAX验证均失败

Madeyedexter

我正在使用ajax jquery验证。

https://code.google.com/p/struts2-jquery/wiki/Validation

在我的struts.xml中,我有

<action name="createChannel" class="channel.ChannelAction" method="createChannel">
<interceptor-ref name="jsonValidationWorkflowStack"/>
<result  name="success">createSuccess.jsp</result>
<result  name="input">createChannel.jsp</result>
</action>

在JSP页面中,我有:

<s:form method="get" action="createChannel" >
<s:textfield name="channelName" label="Channel Name" />
<s:textfield name="channelBand" label="Channel Band"/>
<s:textfield name="vcFrequency" label="Video Carrier Frequency"/>
<s:textfield name="acFrequency" label="Audio Carrier Frequency"/>
<s:select name="chargeType" label="Charge Type" list="{'PrePaid','PostPaid'}"/>
<s:select name="transmissionType" label="Transmission Type" list="{'HD','Standard'}"/>
<s:textfield name="channelCharge" label="Channel Charge"/>
<sj:submit value="Submit" button="true" validate="true" targets="result"  />
</s:form>
<div id="result">Result:</div>

我有带有注解验证的模型类Channel:

public class Channel {
    private int channelId;
    private String channelName;
    private String channelBand;
    private double vcFrequency;
    private double acFrequency;
    private String chargeType; //PrePaid or PostPaid
    private String transmissionType; //HD or Standard
    private double channelCharge;

    private Set<ChannelPackage> channelPackage;

    public Channel(){
        channelPackage=new HashSet<>();
    }

    public int getChannelId() {
        return channelId;
    }

    public void setChannelId(int channelId) {
        this.channelId = channelId;
    }

    @RequiredStringValidator(trim=true,type=ValidatorType.FIELD,message="Please enter valid channel name")
    public String getChannelName() {
        return channelName;
    }

    public void setChannelName(String channelName) {
        this.channelName = channelName;
    }
    @RequiredStringValidator(trim=true,type=ValidatorType.FIELD,message="Please enter valid channel band")
    public String getChannelBand() {
        return channelBand;
    }

    public void setChannelBand(String channelBand) {
        this.channelBand = channelBand;
    }
    @DoubleRangeFieldValidator(type = ValidatorType.SIMPLE,fieldName = "vcFrequency",minInclusive = "40",maxInclusive = "225",message = "The scale must be between ${minInclusive} and ${maxInclusive} (exclusive)")
    public double getVcFrequency() {
        return vcFrequency;
    }

    public void setVcFrequency(double vcFrequency) {
        this.vcFrequency = vcFrequency;
    }
    @DoubleRangeFieldValidator(type = ValidatorType.SIMPLE,fieldName = "acFrequency",minInclusive = "45",maxInclusive = "230",message = "The scale must be between ${minInclusive} and ${maxInclusive} (exclusive)")
    public double getAcFrequency() {
        return acFrequency;
    }

    public void setAcFrequency(double acFrequency) {
        this.acFrequency = acFrequency;
    }

    public String getChargeType() {
        return chargeType;
    }

    public void setChargeType(String chargeType) {
        this.chargeType = chargeType;
    }


    public String getTransmissionType() {
        return transmissionType;
    }

    public void setTransmissionType(String transmissionType) {
        this.transmissionType = transmissionType;
    }
    @DoubleRangeFieldValidator(type = ValidatorType.SIMPLE,fieldName = "channelCharge",minExclusive = "20.5",maxExclusive = "78.5",message = "The scale must be between ${minExclusive} and ${maxExclusive} (exclusive)")
    public double getChannelCharge() {
        return channelCharge;
    }

    public void setChannelCharge(double channelCharge) {
        this.channelCharge = channelCharge;
    }


    public Set<ChannelPackage> getChannelPackage() {
        return channelPackage;
    }

    public void setChannelPackage(Set<ChannelPackage> channelPackage) {
        this.channelPackage = channelPackage;
    }

    public String toString(){
        return channelId+": "+channelName;
    }

}

我的动作类实现了模型驱动接口。我的问题是:

  • 即使我使用正确的数据提交表单,我的表单也会显示错误消息。

  • 与错误消息一起,返回的输入结果显示在结果div中。这意味着单击提交按钮后,我在jsp页面上有两个表单。

  • 如果我从struts.xml中删除jsonValidationWorkflowStack拦截器,我的表单将被提交两次。

这是提交后的屏幕截图:

请帮助我解决这个问题。

在此处输入图片说明

安德里亚·利吉奥斯(Andrea Ligios)

一个问题中有这么多问题...顺便说一句,我们开始:

1.即使我使用正确的数据提交表单,我的表单也会显示错误消息。

这是由于您使用的拦截器堆栈:

<interceptor-ref name="jsonValidationWorkflowStack"/>

定义为

<interceptor-stack name="jsonValidationWorkflowStack">
    <interceptor-ref name="basicStack"/>
    <interceptor-ref name="validation">
        <param name="excludeMethods">input,back,cancel</param>
    </interceptor-ref>
    <interceptor-ref name="jsonValidation"/>
    <interceptor-ref name="workflow"/>
</interceptor-stack>

而basicStack是

<interceptor-stack name="basicStack">
    <interceptor-ref name="exception"/>
    <interceptor-ref name="servletConfig"/>
    <interceptor-ref name="prepare"/>
    <interceptor-ref name="checkbox"/>
    <interceptor-ref name="params"/>
    <interceptor-ref name="conversionError"/>
</interceptor-stack>

如您所见,ModelDriven Interceptor此处涉及任何内容。如果要继续使用ModelDriven,则需要:

  • 添加ModelDriven Interceptor
  • 确保它在之前运行Validation Interceptor,否则将在执行验证时在模型上(尚未)设置您要发送的参数。阅读此答案以准确理解我的意思。

这应该足够了:

<action name="createChannel" class="channel.ChannelAction" method="createChannel">
    <interceptor-ref name="modelDriven"/>
    <interceptor-ref name="jsonValidationWorkflowStack"/>
    <result  name="success">createSuccess.jsp</result>
    <result  name="input">createChannel.jsp</result>
</action>

2.与错误消息一起,返回的输入结果将显示在结果div中。这意味着单击提交按钮后,我在jsp页面上有两个表单。

这很明显,您的设计就是这样,如果发生这种情况,应该如何自动更改INPUT您需要重新考虑您的设计。例如,您可以定位您所在的表单,例如:

<div id="result">
    <s:form method="get" action="createChannel" >
        <s:textfield name="channelName" label="Channel Name" />
        <s:textfield name="channelBand" label="Channel Band"/>
        <s:textfield name="vcFrequency" label="Video Carrier Frequency"/>
        <s:textfield name="acFrequency" label="Audio Carrier Frequency"/>
        <s:select name="chargeType" label="Charge Type" list="{'PrePaid','PostPaid'}"/>
        <s:select name="transmissionType" label="Transmission Type" list="{'HD','Standard'}"/>
        <s:textfield name="channelCharge" label="Channel Charge"/>
        <sj:submit value="Submit" button="true" validate="true" targets="result"  />
    </s:form>
</div>

然后在两者的情况下,INPUTSUCCESS,你回来的消息,形式和重新填充字段。最好也创建一个JSP代码段,使其也可以在原始页面中使用<s:include/>,以遵循DRY。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

验证表单数据

来自分类Dev

ASP.NET MVC Ajax 提交带有 AntiforgeryToken 的表单和带有验证的序列化表单数据

来自分类Dev

jQuery ajax文件与所有表单数据一起上传到ASP.NET

来自分类Dev

表单数据绑定失败

来自分类Dev

具有自定义验证的Shoulda Matcher导致所有Shoulda验证均失败

来自分类Dev

表单验证而不会丢失表单数据

来自分类Dev

Laravel foreach输入由于表单令牌而导致所有更新均失败

来自分类Dev

WebOS错误:所有配置的身份验证方法均失败

来自分类Dev

当且仅当所有属性均失败时,如何在Laravel验证中编写if条件以执行

来自分类Dev

如果Passport身份验证失败,如何在重定向中保留表单数据?

来自分类Dev

所有尝试查询的主机均失败

来自分类Dev

PHP在表单验证后将表单数据放回表单

来自分类Dev

所有公共映像拉取均失败,并显示“摘要SHA256的文件系统层验证失败”

来自分类Dev

如何在使用Ajax提交的Codeigniter中使用form_validation验证表单数据

来自分类Dev

如何在使用Ajax提交的Codeigniter中使用form_validation验证表单数据

来自分类Dev

使用ajax发送表单数据

来自分类Dev

Ajax获取表单数据和URL

来自分类Dev

使用ajax请求存储表单数据

来自分类Dev

多个 Ajax 表单数据上传 Jquery

来自分类Dev

在php中验证一堆表单数据-是否有必要?

来自分类Dev

是否有更好的多部分/表单数据验证方法

来自分类Dev

如何保持提交按钮禁用,直到表单数据没有填充反应验证?

来自分类Dev

PHP表单提交和表单数据验证

来自分类Dev

发送带有PHP的Ajax回显数据的表单数据不显示

来自分类Dev

MVC表单数据验证和jQuery验证

来自分类Dev

带有表单数据的POST请求

来自分类Dev

页面上多个表单的ajax验证,所有表单都具有相同的类

来自分类Dev

RSpec和Cancancan:所有阴性测试均失败

来自分类Dev

OSLC错误-所有命令均失败

Related 相关文章

  1. 1

    验证表单数据

  2. 2

    ASP.NET MVC Ajax 提交带有 AntiforgeryToken 的表单和带有验证的序列化表单数据

  3. 3

    jQuery ajax文件与所有表单数据一起上传到ASP.NET

  4. 4

    表单数据绑定失败

  5. 5

    具有自定义验证的Shoulda Matcher导致所有Shoulda验证均失败

  6. 6

    表单验证而不会丢失表单数据

  7. 7

    Laravel foreach输入由于表单令牌而导致所有更新均失败

  8. 8

    WebOS错误:所有配置的身份验证方法均失败

  9. 9

    当且仅当所有属性均失败时,如何在Laravel验证中编写if条件以执行

  10. 10

    如果Passport身份验证失败,如何在重定向中保留表单数据?

  11. 11

    所有尝试查询的主机均失败

  12. 12

    PHP在表单验证后将表单数据放回表单

  13. 13

    所有公共映像拉取均失败,并显示“摘要SHA256的文件系统层验证失败”

  14. 14

    如何在使用Ajax提交的Codeigniter中使用form_validation验证表单数据

  15. 15

    如何在使用Ajax提交的Codeigniter中使用form_validation验证表单数据

  16. 16

    使用ajax发送表单数据

  17. 17

    Ajax获取表单数据和URL

  18. 18

    使用ajax请求存储表单数据

  19. 19

    多个 Ajax 表单数据上传 Jquery

  20. 20

    在php中验证一堆表单数据-是否有必要?

  21. 21

    是否有更好的多部分/表单数据验证方法

  22. 22

    如何保持提交按钮禁用,直到表单数据没有填充反应验证?

  23. 23

    PHP表单提交和表单数据验证

  24. 24

    发送带有PHP的Ajax回显数据的表单数据不显示

  25. 25

    MVC表单数据验证和jQuery验证

  26. 26

    带有表单数据的POST请求

  27. 27

    页面上多个表单的ajax验证,所有表单都具有相同的类

  28. 28

    RSpec和Cancancan:所有阴性测试均失败

  29. 29

    OSLC错误-所有命令均失败

热门标签

归档