2

我正在使用 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>
4

2 回答 2

0

消除

private String customerName;

private String emailID;

来自 Action(连同 getter 和 setter),并确保相同的字段(连同 CustomerID)在Customer带有 getter 和 setter 的对象内部。

然后,检查您发布CustomerIDCustomerName从页面的原因,但检查EmailIDCustomerName在操作中。

添加EmailIDJSP,或从验证方法中删除它。

于 2013-03-15T14:28:46.273 回答
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");
 }
}

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

然后验证

public void validate() {
 if (customerName == null || customerName.trim().equals("")) {
   addFieldError("customerName", "Required");
 }
 // the same for email ID
}

以为你有这个想法。

于 2013-03-15T21:47:40.923 回答