随着应用程序的增长,Struts 2validation无法正常工作

在构建复杂的Web应用程序时是否有任何其他validation框架? 或任何validation指南。 链接到示例不是必需的,因为它在简单的表单上工作,但不在具有多个链接的复杂表单中。

这是我的动作类

package com.tpc.action; import java.util.ArrayList; import java.util.List; import com.opensymphony.xwork2.ActionSupport; import com.tpc.domain.LeadFacultyModel; import com.tpc.service.LeadFacultyServiceInterface; public class LeadFacultyAction extends ActionSupport { private static final long serialVersionUID = 1L; private LeadFacultyModel leadFacultyModel; private String lead_faculty_formAction; // Injecting leadFacultyServiceImpl bean LeadFacultyServiceInterface leadFacultyServiceImpl; //variable to store the action message to pass to other pages through get request private String action_msg = null; private List leadFacultyModelList = new ArrayList(); public String execute() throws Exception { return SUCCESS; } public String formAction() throws Exception { if(lead_faculty_formAction.equals("Save")) { System.out.println("Inside Update"); return this.updateLeadFaculty(); } else if(lead_faculty_formAction.equals("Submit")) { System.out.println("Inside Save"); return this.saveLeadFaculty(); } else if(lead_faculty_formAction.equals("Delete")) { System.out.println("Inside Delete"); return this.deleteLeadFaculty(); } else { return SUCCESS; } } public String saveLeadFaculty() throws Exception { boolean result =leadFacultyServiceImpl.createLeadFaculty(leadFacultyModel); if(result == true) { addActionMessage(getText("message.save_success")); return "SAVE_SUCCESS"; } else { addActionError(getText("message.save_error")); return "SAVE_ERROR"; } } public String viewAllLeadFaculty(){ // TODO Auto-generated method stub System.out.println("view all method is called"); try{ leadFacultyModelList = leadFacultyServiceImpl.getAllLeadFaculty(); System.out.println("Action page "+leadFacultyModelList.size()); return SUCCESS; }catch(Exception ex){ ex.printStackTrace(); return ERROR; } } //Section of getter/setter methods in this class public void setLeadFacultyModel(LeadFacultyModel leadFacultyModel) { this.leadFacultyModel = leadFacultyModel; } public LeadFacultyModel getLeadFacultyModel() { return leadFacultyModel; } public String getLead_faculty_formAction() { return lead_faculty_formAction; } public void setLead_faculty_formAction(String lead_faculty_formAction) { this.lead_faculty_formAction = lead_faculty_formAction; } public void setLeadFacultyServiceImpl( LeadFacultyServiceInterface leadFacultyServiceImpl) { this.leadFacultyServiceImpl = leadFacultyServiceImpl; } public void setAction_msg(String action_msg) { this.action_msg = action_msg; } public List getLeadFacultyModelList() { return leadFacultyModelList; } public void setLeadFacultyModelList(List leadFacultyModelList) { this.leadFacultyModelList = leadFacultyModelList; } public String getAction_msg() { return action_msg; } } 

这是LeadFacultyAction-validation.xml:

     Name is required.    

这是struts.xml文件:

  

       /404_error.jsp      baseTemplate   setup_lead_faculty   setup_lead_faculty setup_lead_faculty setup_lead_faculty setup_lead_faculty setup_lead_faculty setup_lead_faculty setup_lead_faculty   setup_lead_faculty_list_view   setup_lead_faculty   

这是我的JSP文件:

       
                           

不同之处仅在于Struts发现validation注释,同时拦截它处理这些注释的操作,以通过应用注释公开的validation规则来执行validation。 解析-validation.xml 。 您可以同时使用基于xml和基于注释的validation方法,也可以添加自定义validation(不包括自定义validation器)。

例如,如果我有一个phone字段,并且我想validation它不是空的并且包含预定义的格式,我将在其上放置两个注释。

  private String phone; public String getPhone() { return phone; } @RequiredStringValidator(type= ValidatorType.FIELD, message="Phone required.") @RegexFieldValidator(type= ValidatorType.FIELD, message="Invalid Phone", regexExpression="\\([0-9][0-9][0-9]\\)\\s[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]") public void setPhone(String phone) { this.phone = phone; } 

然后我有一个我不想validation的execute动作

  @SkipValidation public String execute() throws Exception { 

然后我还有另一个动作, save我想validationquestions但我不想validationphone

  private String myQuestionq1; private String myQuestionq2; public String getMyQuestionq1() { return myQuestionq1; } public void setMyQuestionq1(String myQuestionq1) { this.myQuestionq1 = myQuestionq1; } public String getMyQuestionq2() { return myQuestionq2; } public void setMyQuestionq2(String myQuestionq2) { this.myQuestionq2 = myQuestionq2; } @Action(value="save", results = { @Result(name="input", location = "/default.jsp"), @Result(name="back", type="redirect", location = "/") },interceptorRefs = @InterceptorRef(value="defaultStack", params = {"validation.validateAnnotatedMethodOnly", "true"})) @Validations(requiredFields = { @RequiredFieldValidator(type = ValidatorType.FIELD, fieldName = "myQuestionq1", message = "You must enter a value for field myQuestionq1."), @RequiredFieldValidator(type = ValidatorType.FIELD, fieldName = "myQuestionq2", message = "You must enter a value for field myQuestionq2.") }) public String save() throws SQLException { 

这将仅执行此操作的validation器。

您可以在Apache网站上找到更多示例:

使用注释示例进行validation。