1.Struts2 验证之一采用xml
1.validation.xml文件的命名有两种方式,即class-validation.xml和class-alias-validation.xml。其中的class就是该Action的类名(不含.class),alias就是action-name。需要注意的是,class-validation.xml在调用该class的任何方法时都会起作用,class-alias-validation.xml则仅在和alias中的action-name相同时才起作用。如果你希望某个action到来时,仅有class-alias-validation.xml发生作用,那是做不到的。所以在class-validation.xml只能放全体method都用的着的验证条件,或者索性不建立class-validation.xml这个文件,而只使用class-alias-validation.xml。 alias 为struts.xml中配置的acction名。
如下:BookAction-Store-validation.xml,说明验证只对BookAtcion中的store方法起作用。
<action name="Store" class="tutorial.action.BookAction" method="store">
<result type="redirect">List.action</result>
<result name="input">Edit.jsp</result> (必须配置一个默认的input指向页面,也时出现验证错误的页面转向。)
</action>
2.Struts2 验证之一采用annotation
package tutorial.action;
import java.util.Collection;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.validation.SkipValidation;
import tutorial.dao.BookDao;
import tutorial.model.Book;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.validator.annotations.RequiredFieldValidator;
import com.opensymphony.xwork2.validator.annotations.RequiredStringValidator;
import com.opensymphony.xwork2.validator.annotations.Validation;
import com.opensymphony.xwork2.validator.annotations.Validations;
import com.opensymphony.xwork2.validator.annotations.ValidatorType;
import common.MyException;
@Validation() //表示使用注解验证
//If you want to use several annotations of the same type, these annotation //must be nested within the @Validations() annotation
@Validations(requiredStrings ={ @RequiredStringValidator(type = ValidatorType.SIMPLE, fieldName = "book.title", message = "title is not null")},
requiredFields={@RequiredFieldValidator(type = ValidatorType.SIMPLE, fieldName = "book.price", message = "price is not null")})
public class BookAction extends ActionSupport implements ServletRequestAware {
private static final long serialVersionUID = 872316812305356L;
private String isbn;
private String[] isbns;
private Book book;
private Collection<Book> books;
private BookDao dao = BookDao.getInstance();
private HttpServletRequest request;
public Book getBook() {
return book;
}
public void setBook(Book book) {
this.book = book;
}
public String getIsbn() {
return isbn;
}
public void setIsbn(String isbn) {
this.isbn = isbn;
}
public String[] getIsbns() {
return isbns;
}
public void setIsbns(String[] isbns) {
this.isbns = isbns;
}
public Collection<Book> getBooks() {
return books;
}
public void setBooks(Collection<Book> books) {
this.books = books;
}
@SkipValidation() //表示这个方法忽略验证
public String load() {
book = dao.getBook(isbn);
return SUCCESS;
}
@SkipValidation()
public String list() {
books = dao.getBooks();
request.setAttribute("msg", "aaaaaaaaaa");
HttpServletRequest aa= ServletActionContext.getRequest();
aa.setAttribute("aa", "eeeeeeeeeeeeeeeee");
return SUCCESS;
}
public String store() throws MyException {
if (book.getTitle().equals("admin")) {
throw new MyException("自定义异常");
}
dao.storeBook(book);
return SUCCESS;
}
@SkipValidation()
public String remove() {
if(null != isbn) {
dao.removeBook(isbn);
} else {
dao.removeBooks(isbns);
}
return SUCCESS;
}
public void setServletRequest(HttpServletRequest arg0) {
request=arg0;
}
}