我很擅长使用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>
答案 0 :(得分:0)
删除
private String customerName;
private String emailID;
来自Action(以及getter和setter),并确保相同的字段(以及CustomerID)位于具有getter和setter的Customer
对象中。
然后,查看您从网页发布CustomerID
和CustomerName
的原因,但检查操作中的EmailID
和CustomerName
。
在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
}
认为你有这个想法。