`
highriver
  • 浏览: 72289 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于struts2中@validations对于方法的校验

    博客分类:
  • java
阅读更多
在struts2中,我使用下面的方法请求。
通过Action!Method.action的方法实现了dispatchAction。现在的情况是action里的execute已经没有了。被若干个crud方法取代。

现在想使用@validations用来针对crud方法中的变量做校验.但是比如下面的action.
package com.tongcard.merchant.web.actions.privilege;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import org.apache.struts2.config.Namespace;
import org.apache.struts2.config.Result;
import org.apache.struts2.config.Results;
import org.apache.struts2.dispatcher.ServletRedirectResult;

import com.opensymphony.xwork2.Action;
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 com.tongcard.merchant.web.helper.BaseAction;
import com.tongcard.merchant.web.helper.BusinessResult;
import com.tongcard.merchant.web.helper.PageHelperList;
import com.tongcard.merchant.web.manager.PrivilegeManager;
import com.tongcard.merchant.web.manager.impl.PrivilegeManagerImpl;
import com.tongcard.merchant.web.model.Role;
import com.tongcard.merchant.web.model.User;

@Namespace("/privilege")
@Results( {
		@Result(name = "success", value = "/privilege/roleSearch.jsp"),
		@Result(name = "input", value = "/privilege/roleNew.jsp", type = ServletRedirectResult.class),
		@Result(name = "modify", value = "/privilege/roleModify.jsp"),
		@Result(name = "login", value = "/login/login.jsp") })
public class RoleAction extends BaseAction {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private static int pageSize = 5;

	private int currentPage = 1;

	private PageHelperList pageHelper;

	private Role role;

	private List<String> pages;

	private String actions;

	private String info;

	private String roleId;

	private List<Role> roles;

	private PrivilegeManager privilegeManager;

	[color=red]@Validations(requiredStrings = { @RequiredStringValidator(type = ValidatorType.SIMPLE, fieldName = "role.roleName", message = "角色名称不能为空") })[/color]
	public String create() {
		BusinessResult bres = null;
		role
				.setOrgCode(request.getSession().getAttribute("orgCode")
						.toString());
		bres = privilegeManager.newRole(role);
		info = bres.getInfo();
		return Action.INPUT;
	}
	
	// 分页查询得到当前管理员所在机构下的角色。
	public List<Role> buildRoleDivPageData(HashMap<String, String> map) {
		List<Role> roles = null;
		int count = privilegeManager.countRole(map.get("orgCode"));
		if (count == 0) {
			return null;
		}
		pageHelper = new PageHelperList(count, currentPage, pageSize);
		map.put("begin", pageHelper.getPageStartRow() + "");
		map.put("end", pageHelper.getPageEndRow() + "");
		roles = privilegeManager.searchRoleByPage(map);
		pages = new ArrayList<String>();
		for (int i = 0; i < pageHelper.getTotalPages(); i++) {
			pages.add(String.valueOf(i + 1));
		}
		return roles;
	}

	
	public String search() {
		HashMap<String, String> map = new HashMap<String, String>();
		User user = (User) (request.getSession().getAttribute("user"));
		if (null == user) {
			return "login";
		}
		map.put("orgCode", user.getOrgCode());
		roles = buildRoleDivPageData(map);
		return Action.SUCCESS;
	}

	public String show() {
		role = privilegeManager.searchSimpleRoleByRoleId(Long.valueOf(roleId));
		return "modify";
	}



	public String init() {
		return Action.INPUT;
	}

	// @Validations(requiredStrings = { @RequiredStringValidator(type
	// =ValidatorType.SIMPLE, fieldName = "role.roleName", message = "角色名称不能为空")
	// })
	public String update() {
		BusinessResult bres = null;
		bres = privilegeManager.modifyRole(role);
		info = bres.getInfo();
		request.setAttribute("role", role);
		return "modify";
	}

	// 得到全部当前管理员所在机构下的角色
	public List<Role> getRoles(String orgCode) {
		List<Role> list = null;
		list = privilegeManager.searchRolesByOrg(orgCode);
		return list;
	}

	public String getActions() {
		return actions;
	}

	public void setActions(String actions) {
		this.actions = actions;
	}

	public PrivilegeManager getPrivilegeManager() {
		return privilegeManager;
	}

	public void setPrivilegeManager(PrivilegeManagerImpl privilegeManager) {
		this.privilegeManager = privilegeManager;
	}

	public String getInfo() {
		return info;
	}

	public void setInfo(String info) {
		this.info = info;
	}

	public void setPrivilegeManager(PrivilegeManager privilegeManager) {
		this.privilegeManager = privilegeManager;
	}

	public Role getRole() {
		return role;
	}

	public void setRole(Role role) {
		this.role = role;
	}

	public List<String> getPages() {
		return pages;
	}

	public void setPages(List<String> pages) {
		this.pages = pages;
	}

	public static int getPageSize() {
		return pageSize;
	}

	public static void setPageSize(int pageSize) {
		RoleAction.pageSize = pageSize;
	}

	public int getCurrentPage() {
		return currentPage;
	}

	public void setCurrentPage(int currentPage) {
		this.currentPage = currentPage;
	}

	public PageHelperList getPageHelper() {
		return pageHelper;
	}

	public void setPageHelper(PageHelperList pageHelper) {
		this.pageHelper = pageHelper;
	}

	public String getRoleId() {
		return roleId;
	}

	public void setRoleId(String roleId) {
		this.roleId = roleId;
	}

	public List<Role> getRoles() {
		return roles;
	}

	public void setRoles(List<Role> roles) {
		this.roles = roles;
	}
}

create方法上的红色字体表示create时的一个校验。但是当我执行另一个请求:role!search.action时,却会执行role!create.action方法。真的很奇怪。不知道是哪里配置的问题。
分享到:
评论
10 楼 yangwu21 2008-04-02  
加入拦截器:
   <package name="sfc-default" extends="struts-default" abstract="true">
<interceptors>
<interceptor-stack name="defaultStack">
<interceptor-ref name="exception"/>
<interceptor-ref name="alias"/>
<interceptor-ref name="servletConfig"/>
<interceptor-ref name="prepare"/>
<interceptor-ref name="i18n"/>
<interceptor-ref name="chain"/>
<interceptor-ref name="debugging"/>
<interceptor-ref name="profiling"/>
<interceptor-ref name="scopedModelDriven"/>
<interceptor-ref name="modelDriven"/>
<interceptor-ref name="fileUpload"/>
<interceptor-ref name="checkbox"/>
<interceptor-ref name="staticParams"/>
<interceptor-ref name="params">
<param name="excludeParams">dojo\..*</param>
</interceptor-ref>
<interceptor-ref name="conversionError"/>
<interceptor-ref name="validation">
<param name="excludeMethods">input,back,cancel,browse</param>
<param name="validateAnnotatedMethodOnly">true</param>
</interceptor-ref>
<interceptor-ref name="workflow">
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="defaultStack"/>
</package>

然后
在struts 配置文件里面加入:
        <action name="save" class="organizationAction" method="save">
        <interceptor-ref name="defaultStack"/>
        <result name="input">../user/editOrganization.jsp </result>
<result name="success" type="redirect">list.action</result>
        </action>
9 楼 lerluc 2007-05-24  
看来input()应该是Override了ActionSupport的方法,所以没有被validate

+看这帖

然后这个input()好像说是在struts-default.xml里面定义了skip validation,可以在配置package的时候将'validation
interceptor configured differently
'(不过我们不写xml)

+看这帖

最后终于得到了一把金钥匙
@SkipValidation
+看这帖

为什么就这么简单一个注释,搞了那么久才google出来,请上帝原谅我的SB。。。
8 楼 lerluc 2007-05-24  
除了public String input()
其他任何名字的方法都会validate
真拿它没办法
我就是不想写xml
7 楼 highriver 2007-05-16  
我最初有的,后来去了,不管用。它应该只是表明进行类级别的检验。
6 楼 lerluc 2007-05-15  
写少了个括号,嘻嘻
@Validation()
加在public class RoleAction...头上
5 楼 lerluc 2007-05-15  
貌似你的class头上少了一个@Validation
http://struts.apache.org/2.0.6/docs/validation-annotation.html
4 楼 highriver 2007-05-14  
这个是我后来找到的一个资料,大家看看就明白了。xly_971223   同志说的对,用配置文件可能好一些。
http://www.nabble.com/struts2-validation-for-only-one-method-in-action-tf3267302.html#a9083597
3 楼 xly_971223 2007-05-12  
我觉得struts2采用annotation的方式配置没有采用配置文件集中配置好,配置文件的可维护行更好一些
感觉struts2也是在盲目的追求新技术
2 楼 highriver 2007-05-11  
我的action很长,你可以不看,其实就是为了说明方便。
1 楼 highriver 2007-05-11  
抱歉,create方法上注解用红色字体表示没有显示出来。谢谢各位。

相关推荐

    Struts 2 数据校验功能及校验问题的解决方案

    Struts 2的数据校验还可以通过注解方式进行,使用@FieldCheck、@Validations等注解来指定字段的校验规则。这种方式更加直观,减少了代码量,但可能需要额外的库支持。 为了处理更复杂的数据校验场景,Struts 2支持...

    struts2 校验框架

    Struts2是一个非常流行的Java Web应用框架,它...理解并熟练应用Struts2的校验框架对于构建健壮的Web应用至关重要。通过合理的配置和编程,你可以确保应用程序的数据质量,提高安全性,同时为用户提供友好的交互体验。

    一个简单的struts校验例子

    在这个“一个简单的Struts校验例子”中,我们将探讨如何在Struts框架中实现数据验证,这对于确保用户输入的正确性和安全性至关重要。 在Web应用程序中,数据验证通常在客户端和服务器端进行。客户端验证可以提供...

    Struts2学习笔记

    在`execute()`方法中,我们设置了这个消息并返回`SUCCESS`,这是Struts2中表示操作成功的一个常量。 Struts2的动作配置通常在`struts.xml`文件中完成。在这个例子中,我们定义了一个名为`HelloWorld`的action,它...

    (转)Struts2中的collection验证

    `CollectionFieldValidator`是Struts2框架中处理集合验证的类,其主要任务是对用户提交的集合数据进行校验。这个类通常会与表单字段关联,当用户尝试提交包含多个值的字段时(例如,多选框或复选框),`...

    Struts2注解

    Struts2注解是Struts2框架中的一种简化配置的方式,允许开发者在代码中直接进行配置,无需在XML文件中进行繁琐的设置。这提高了开发效率,并使得代码更具有可读性。 一、配置web.xml 在Struts2中,web.xml是部署...

    jsp字段校验与非字段校验

    在Struts2中,非字段校验通常在Action的`validate()`方法中实现。例如,检查两个密码是否一致: ```java public class RegistrationAction extends ActionSupport { private String password; private String ...

    基于struts2的购物网站

    此外,Struts2提供了一些安全相关的拦截器,例如,Validations拦截器用于字段验证,而SessionAware接口可以帮助开发者管理会话中的信息。 总结起来,"基于Struts2的购物网站"项目涵盖了Web开发中的多个核心知识点,...

    struts2的例子

    6. **文件上传下载**:Struts2提供了一套完整的文件上传和下载的API,可以方便地处理用户上传的文件,并且支持多文件上传,这对于处理图像、文档等数据的web应用来说非常实用。 7. **初步上手**:了解如何搭建...

    struts框架文件上传代码

    这些可以通过Struts2的拦截器和Action的校验规则来实现。 5. **安全注意事项**: - 文件名处理:避免使用原始文件名,以防路径遍历攻击,应重命名上传的文件。 - 文件类型检查:验证上传的文件类型,防止上传恶意...

    struts验证框架-validation的验证框架

    14. **VisitorFieldValidator**:允许将Action中的对象属性校验委托给该对象已定义的校验方法。 15. **CustomValidator**:实现自定义的验证逻辑。 16. **ValidationParameter**:提供参数以定制验证行为。 ### ...

    Struts的验证框架Validate使用[1]

    Struts的验证框架Validate是Apache Struts框架中的一个重要组成部分,主要用于处理用户输入的数据验证。在Web应用程序中,数据验证是确保用户提交的信息符合业务规则的关键步骤,防止非法数据进入数据库或引发程序...

Global site tag (gtag.js) - Google Analytics