2

Web アプリケーションの開発に Struts 2 を使用しています。を実装するアクションクラスがあります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

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
}

あなたがアイデアを持っていると思った。

于 2013-03-15T21:47:40.923 に答える
0

削除する

private String customerName;

private String emailID;

Action から (ゲッターとセッターと共に)、同じフィールド (CustomerID と共に) がCustomerゲッターとセッターを持つオブジェクト内にあることを確認します。

次に、ページから投稿CustomerIDしている理由を確認しますが、アクションで確認します。CustomerNameEmailIDCustomerName

JSPを追加EmailIDするか、検証メソッドから削除します。

于 2013-03-15T14:28:46.273 に答える