Struts 2验证方法不能在没有XML的情况下工作

时间:2013-03-15 11:22:31

标签: java jsp validation struts2 ognl

我很擅长使用Struts 2来开发Web应用程序。我有实施ActionSupport的动作类。我的问题是,当我输入一些文本时,错误消息不会被清除,而且表单也没有被提交。

如果有人能够帮助我看到我缺乏的东西,我将非常感激。

这就是我所拥有的:

CustomerAction.java

public class CustomerAction extends ActionSupport
    {
    private Customer customer = new Customer();

    private String customerName;

    private String emailID;

    public String getCustomerName() {
            return customerName;
        }

        public void setCustomerName(String customerName) {
            this.customerName = customerName;
        }
    public Customer getCustomer() {
            return customer;
        }

        /**
         * @param customer
         */
        public void setCustomer(Customer customer) {
            this.customer = customer;
        }

    public String getEmailID() {
            return emailID;
        }

        public void setEmailID(String emailID) {
            this.emailID = emailID;
        }

    public void validate()
        {

            if (customerName == null)
            {

                addFieldError("customer.customerName","Required");

            }

            if (emailID == null || emailID.trim().equals(""))
            {
                addFieldError("customer.emailID","Email is Required");
                }

        }

Struts.xml

    <action name="addCustomer" class="com.yell.hibu.action.CustomerAction" method="execute">
    <interceptor-ref name="params">

    <param name="excludeParams">dojo\..*,^struts\..*</param>

    </interceptor-ref>

    <interceptor-ref name="validation">

    <param name="excludeMethods">input,back,cancel,browse</param></interceptor-ref>

    <interceptor-ref name="workflow">

    <param name="excludeMethods">input,back,cancel,browse</param>

   </interceptor-ref>
  <result name="input">/registration.jsp</result>
 <result name="success">/success.jsp</result>
</action>
</package>
</struts>

regisration.jsp

    <%@ taglib prefix="s" uri="/struts-tags"%>

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">



<html>
<head>

 <title>Customer Registration Form</title>
  <s:head/>
 </head>
<body>
    <br>
    <br>
    <center>
<table width="450" align="center">
            <tr>
<td align="center" height="40"><font
style="color: #003300; font-family: fantasy !important;"><strong
                        style="color: #003300 !important;">Registration Form</strong></font></td></tr>

<tr>
<td width="1000" align="center"><br> <font color="#003300"><s:actionerror/>
<s:form action="addCustomer" id="register-form" method="post" theme="xhtml" enctype="multipart/form-data">

<s:textfield name="customer.customerID" label="Customer ID" size="15"  />
<s:textfield name="customer.customerName" label="Customer Name:" maxlength="10"/>
</s:form>
</body>
</head>
</html>

2 个答案:

答案 0 :(得分:0)

删除

private String customerName;

private String emailID;

来自Action(以及getter和setter),并确保相同的字段(以及CustomerID)位于具有getter和setter的Customer对象中。

然后,查看您从网页发布CustomerIDCustomerName的原因,但检查操作中的EmailIDCustomerName

在JSP中添加EmailID,或从验证方法中删除它。

答案 1 :(得分:0)

要提交表单,您需要传递validate方法,而不是在其中添加错误。如果添加错误或错误是通过xml验证添加的,那么默认情况下框架将返回input结果。你的行动是/registration.jsp。然后没有执行execute方法。您添加了错误,因为操作字段未初始化。在JSP中,您引用对象customer并使用OGNL表示法,值将由其中的params拦截器设置。因此,要验证此值,您应该编写

public void validate() {
 if (customer.getCustomerName() == null || customer.getCustomerName().trim().equals("")) {
   addFieldError("customer.customerName", "Required");
 }
}

如果您不在JSP中使用customer对象,那么您应该对引用操作属性的字段名称使用OGNL表示法。

然后验证

public void validate() {
 if (customerName == null || customerName.trim().equals("")) {
   addFieldError("customerName", "Required");
 }
 // the same for email ID
}
认为你有这个想法。