【struts2】自定义ActionNameBuilder

首先我们来看下struts2定义action的三种方式:xml配置、@Action注解、自动扫描action类。

  • xml配置
    <package name="user-package" namespace="/user" extends="struts" >
    	<action name="index" class="com.action.UserAction" method="index">
    		<result name="success" >/WEB-INF/content/user/index.jsp</result>
    	</action>
    </package>

  • @Action注解

	@Action("index")
	public String index(){
		return SUCCESS;
	}

  • 自动扫描Action类
#禁止扫描action的class
struts.convention.action.disableScanning=false
#Action后缀
struts.convention.action.suffix=Action
#用于配置包名后缀。默认为action、actions、struts
struts.convention.package.locators=action
#设置即使没有@Action注释,依然创建Action映射
struts.convention.action.mapAllMatches=true

对于xml配置@Action注解都定义了action的名称,而自动扫描Action类方式创建action时默认是使用ActionNameBuilder的实现类SEOActionNameBuilder来生成actionName,在struts2-convention-plugin的struts-plugin.xml配置如下:

<bean type="org.apache.struts2.convention.ActionNameBuilder" name="convention" class="org.apache.struts2.convention.SEOActionNameBuilder"/>
<constant name="struts.convention.actionNameBuilder" value="convention"/>

在SEOActionNameBuilder中主要通过以下三个配置来生成actionName

  • struts.convention.action.name.lowercase是否转换成小写,默认为true
  • struts.convention.action.name.separator分隔符,默认为中划线-
  • struts.convention.action.suffix 后缀,默认为Action
以下是根据默认规则生成的actionName如下:

UserAction-->user

UserAccountAction-->user-account

UserACcountAction-->user-account

UserAcCountAction-->user-ac-count

修改配置为

struts.convention.action.name.lowercase=false
struts.convention.action.name.separator=

则生成的actionName如下:

UserAction-->User

UserAccountAction-->UserAccount

UserACcountAction-->UserACcount

UserAcCountAction-->UserAcCount

根据我们平常的编码习惯,变量名习惯使用类名,第一个字母小写,如果我们想生成以下的actionName

UserAction-->user

UserAccountAction-->userAccount

UserACcountAction-->userACcount

UserAcCountAction-->userAcCount

第一步:自定义ActionNameBuilder实现类

<span style="font-size:14px;">public class SimpleActionNameBuilder implements org.apache.struts2.convention.ActionNameBuilder{
	private String suffixRegex;
	private static final String BLANK = "";
	 @Inject
	public SimpleActionNameBuilder(@Inject(value="struts.convention.action.suffix") String actionSuffix){
		suffixRegex = actionSuffix+"$";
	}
	public String build(String className) {
		String actionName = className.replaceAll(suffixRegex, BLANK);
		actionName = actionName.substring(0, 1).toLowerCase()+actionName.substring(1, actionName.length());
		return actionName;
	}
}</span>

第二步:配置ActionNameBuilder

<bean type="org.apache.struts2.convention.ActionNameBuilder" name="simpleActionNameBuilder" class="com.test.support.struts2.SimpleActionNameBuilder"/>
<constant name="struts.convention.actionNameBuilder" value="simpleActionNameBuilder"/>




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值