我有一个NetBeans中的Spring框架的Java Web应用程序项目,我试图使用Spring验证。Spring验证
我的应用程序所做的是提出一张支持票。
我已经阅读了几个教程,并且我得到了表单直到填充字段才发送。问题是我无法显示我在“Validator”类中定义的错误消息。
也就是说,如果必填字段未填写,表单不会发送,但错误消息不会出现在任何地方。
有人能告诉我我做错了什么吗?
这是我的代码:
SupportTicket类:
package controller;
public class SupportTicket
{
private String SubmissionStatus;
private String ReportNumber;
private String SupportType;
private String WithContract;
private String Priority;
private String SupportTicketID;
private String CustomerName;
private String SenderName;
private String SenderLastName;
private String ContactMail;
private String ContactPhone;
private String Description;
public String submitTicket()
{
//Do something
}
//setters and getters for private members
public String getContactMail() {
return ContactMail;
}
public void setContactMail(String ContactMail) {
this.ContactMail = ContactMail;
}
public String getContactPhone() {
return ContactPhone;
}
public void setContactPhone(String ContactPhone) {
this.ContactPhone = ContactPhone;
}
public String getCustomerName() {
return CustomerName;
}
public void setCustomerName(String CustomerName) {
this.CustomerName = CustomerName;
}
public String getSenderName() {
return SenderName;
}
public void setSenderName(String SenderName) {
this.SenderName = SenderName;
}
public String getDescription() {
return Description;
}
public void setDescription(String Description) {
this.Description = Description;
}
public String getSubmissionStatus() {
return SubmissionStatus;
}
public void setSubmissionStatus(String SubmissionStatus) {
this.SubmissionStatus = SubmissionStatus;
}
public String getReportNumber() {
return ReportNumber;
}
public void setReportNumber(String ReportNumber) {
this.ReportNumber = ReportNumber;
}
public String getSupportTicketID() {
return SupportTicketID;
}
public void setSupportTicketID(String SupportTicketID) {
this.SupportTicketID = SupportTicketID;
}
public String getPriority() {
return Priority;
}
public void setPriority(String Priority) {
this.Priority = Priority;
}
public String getSupportType() {
return SupportType;
}
public void setSupportType(String SupportType) {
this.SupportType = SupportType;
}
public String getWithContract() {
return WithContract;
}
public void setWithContract(String WithContract) {
this.WithContract = WithContract;
}
public String getSenderLastName() {
return SenderLastName;
}
public void setSenderLastName(String SenderLastName) {
this.SenderLastName = SenderLastName;
}
}
SupportTicketValidator类:
package controller;
import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;
public class SupportTicketValidator implements Validator
{
@Override
public boolean supports(Class aClass)
{
return SupportTicket.class.equals(aClass);
}
@Override
public void validate(Object target, Errors errors)
{
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "SenderName", "SenderName.required", "Sender Name is required");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "SenderLastName", "SenderLastName.required", "Sender Last Name is required");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "ContactMail", "ContactMail.required", "E-mail is required");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "CustomerName", "CustomerName.required", "Customer Name is required");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "ContactPhone", "ContactPhone.required", "Phone is required");
}
}
SupportTicketController类:
package controller;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.SimpleFormController;
import service.SupportTicketService;
public class SupportTicketController extends SimpleFormController
{
public SupportTicketController()
{
setCommandClass(SupportTicket.class);
setCommandName("supportTicket");
setSuccessView("resultView");
setFormView("inputView");
}
@Override
protected ModelAndView onSubmit(Object command) throws Exception
{
SupportTicket supportTicket = (SupportTicket)command;
ModelAndView mv = new ModelAndView(getSuccessView());
mv.addObject("SubmissionStatus", supportTicket.submitTicket());
mv.addObject("ReportNumber", supportTicket.getReportNumber());
mv.addObject("CustomerName", supportTicket.getCustomerName());
mv.addObject("SupportType", supportTicket.getSupportType());
mv.addObject("WithContract", supportTicket.getWithContract());
mv.addObject("SenderName", supportTicket.getSenderName());
mv.addObject("SenderLastName", supportTicket.getSenderLastName());
mv.addObject("ContactMail", supportTicket.getContactMail());
mv.addObject("ContactPhone", supportTicket.getContactPhone());
mv.addObject("Description", supportTicket.getDescription());
mv.addObject("Priority", supportTicket.getPriority());
return mv;
}
}
调度-servlet.xml中:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>
<bean id="supportTicketValidator" class="controller.SupportTicketValidator" />
<bean class="controller.SupportTicketController" p:supportTicketService-ref="supportTicketService" p:validator-ref="supportTicketValidator"/>
<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="index.htm">indexController</prop>
</props>
</property>
</bean>
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/jsp/"
p:suffix=".jsp" />
<bean name="indexController"
class="org.springframework.web.servlet.mvc.ParameterizableViewController"
p:viewName="index" />
</beans>
InputView.jsp:
<%@taglib uri="http://www.springframework.org/tags" prefix="spring" %>
<%@page contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<style type="text/css">
h1 {
color: #3990bd;
font-size: 22px;
line-height: 22px;
font-family: Arial, Helvetica, sans-serif;
font-weight: normal;
text-decoration: none;
font-family: Arial, Helvetica, sans-serif;
}
p {font-family:Arial, Helvetica, sans-serif ; font-size: 12px;color:#666; font-weight:bold}
.blue {font-family:Arial, Helvetica, sans-serif ; font-size: 12px;color: #3990bd}
.error {font-family:Arial, Helvetica, sans-serif; font-size: 9px; color:#F00}
</style>
</head>
<body>
<h1>Please give us some information:</h1>
<p> </p>
<spring:nestedPath path="supportTicket">
<form id="inputForm" action="" method="post">
<form:errors path="*" cssClass="error"/>
<table width="640" border="0" cellpadding="5" cellspacing="5">
<tr>
<td><p>Name:</p></td>
<td><spring:bind path="SenderName">
<input type="text" name="${status.expression}" class="blue" value="${status.value}" size="50">
</spring:bind>
<form:errors path="SenderName" cssClass="error"/>
</td>
</tr>
<tr>
<td><p>Last Name</p></td>
<td><spring:bind path="SenderLastName">
<input type="text" name="${status.expression}" class="blue" value="${status.value}" size="50">
</spring:bind>
</td>
</tr>
<tr>
<td><p>Email:</p></td>
<td><spring:bind path="ContactMail">
<input type="text" name="${status.expression}" class="blue" value="${status.value}" size="50">
</spring:bind>
</td>
</tr>
<tr>
<td><p>Customer name:</p></td>
<td></p>
<spring:bind path="CustomerName">
<input type="text" name="${status.expression}" class="blue" value="${status.value}" size="50">
</spring:bind>
</td>
</tr>
<tr>
<td><p>Phone:</p></td>
<td><spring:bind path="ContactPhone">
<input type="text" name="${status.expression}" class="blue" value="${status.value}" size="50">
</spring:bind>
</td>
</tr>
<tr>
<td><p>Support needed:</p></td>
<td><spring:bind path="SupportType">
<select name="${status.expression}" class="blue" value="${status.value}">
<option>App error</option>
<option>New app</option>
<option>Wrong result</option>
<option>Other</option>
</select>
</spring:bind>
</td>
</tr>
<tr>
<td><p>Do you have a support contract?</p></td>
<td><spring:bind path="WithContract">
<select name="${status.expression}" class="blue" value="${status.value}">
<option>No</option>
<option>Yes</option>
</select>
</spring:bind>
</td>
</tr>
<tr>
<td><p>Priority:</p></td>
<td><spring:bind path="Priority">
<select name="${status.expression}" class="blue" value="${status.value}">
<option>Low</option>
<option>Medium</option>
<option>High</option>
</select>
</spring:bind>
</td>
</tr>
<tr>
<td><p>Requirement description:</p></td>
<td> <spring:bind path="Description">
<textarea name="${status.expression}" class="blue" value="${status.value}" rows="5" cols="52">
</textarea>
</spring:bind>
</td>
</tr>
<tr>
<td> </td>
<td><div align="right">
<input type="submit" class="blue" value="Submit Ticket">
</div>
</td>
</tr>
</table>
<p><br>
</p>
</form>
</spring:nestedPath>
</body>
</html>
正如我提到的,验证工作(我认为),因为形式是不submited直到我填写所需的字段,但错误消息不显示与<窗体:错误>标签。
你能给我一个建议来解决我的问题吗?
控制器是Spring 2.0风格,如果您没有特定的理由使用这种方式,我强烈建议使用Spring MVC应用程序的Spring 3.0风格。 @见http://viralpatel.net/blogs/2010/06/spring-3-mvc-create-hello-world-application-spring-3-mvc.html – Ralph