所谓间接实现零配置,是指只要做些初始化的配置之后,在以后的开发中基本上不用再对每个Action做配置

struts.xml这样配置
<action name="*/*" method="{2}" class="workbench.web.actions.{1}Action">
   <result name="custom">/view/{1}/${target}.jsp</result>
</action>


struts.properties的配置:
struts.objectFactory = spring
struts.objectFactory.spring.autoWire = name
struts.devMode = true
struts.enable.DynamicMethodInvocation = false
struts.action.extension = 
struts.enable.SlashesInActionNames = true


然后写一个BaseAction:
public abstract class BaseAction {
	protected final String CUSTOM = "custom";
	private String target;
	protected final Log logger = LogFactory.getLog(getClass());
	public String getTarget() {
		return target;
	}
	public void setTarget(String target) {
		this.target = target;
	}
	
	protected String render(String _target){
		setTarget(_target);
		return CUSTOM;
	}
}


这样其余的Action都可以直接继承BaseAction,不用再做任何配置
通过return render(target)转发到指定的jsp页面,从而间接实现零配置

public class UserAction extends BaseAction{
	private User user;
	private UserService userService;
	public void setUserService(UserService userService) {
		this.userService = userService;
	}
	
	public User getUser() {
		return user;
	}
	public void setUser(User user) {
		this.user = user;
	}
	public String test(){
		user = userService.get(1l);
		return render("test");
	}
}


URL:http://localhost:8080/workbench/User/test
评论
ericxu131 2008-03-19
全都用固定规则固定好 感觉有点ror的感觉
feigme 2008-02-12
<action name="identity_*_*" method="{1}" class="identityAction">
<result name="input">{2}.jsp</result>
<result>login_ok.jsp</result>
</action>
补充一下,用这种配置也可以解决验证后返回不同页面的问题
但是action的name就变得繁琐点
不知道这样有无隐患
feigme 2008-02-12
kissbey 写道
涉及到校验的话没有input怎么返回,struts会报错的

我也是碰到这个问题
不知道楼主有什么解决
<result name="input">{1}.jsp</result>
kusoft 2008-01-31
我不太清楚,楼主为什么不打开struts.enable.DynamicMethodInvocation = true,难道打开这个参数,会有问题吗?
kissbey 2008-01-30
涉及到校验的话没有input怎么返回,struts会报错的
shim 2007-12-16
colin4k 写道

struts.xml这样配置
<action name="*/*" method="{2}" class="workbench.web.actions.{1}Action">
   <result name="custom">/view/{1}/${target}.jsp</result>
</action>


struts.properties的配置:
struts.objectFactory = spring
struts.objectFactory.spring.autoWire = name
struts.devMode = true
struts.enable.DynamicMethodInvocation = false
struts.action.extension = 
struts.enable.SlashesInActionNames = true



URL:http://localhost:8080/workbench/User/test


跟着做了,结果不成功,Struts2的jar版本也是最新的。
不知道楼主能否把配制说详细些,如web.xml里的配制等,
最好能给个简单可运行的Demo了。
yyjn12 2007-12-04
struts2的热衷者们,我有个问题想请教一下.

在linux resin3 环境下,你们有没有遇到问题?
absolute 2007-12-04
做验证好像就有问题了,楼主碰到过吗,你是怎么做的
colin4k 2007-11-20
jxd1976 写道
colin4k 写道
另外以上代码是经测试通过的,今天加上了事务的控制,自己写了个Interceptor


这个零配置不错,把事务控制的代码也贴上来,学习一下。

web根目录下的index.jsp怎么处理?


事务控制主要有以下几个步骤,
第一、TransactionInterceptor的部分代码
protected String doIntercept(ActionInvocation invocation) throws Exception {
		String result = null;
		PlatformTransactionManager transactionManager = (PlatformTransactionManager) BeanLoader
				.getBean("transactionManager");
		DefaultTransactionDefinition def = new DefaultTransactionDefinition();
		
		def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
		def.setReadOnly(false);
		TransactionStatus transactionStatus = transactionManager
				.getTransaction(def);
		try {
			result = invocation.invoke();
			transactionManager.commit(transactionStatus);
		}
		catch (Exception e) {
			transactionManager.rollback(transactionStatus);
			logger.error("action error,rollback transaction.");
			throw e;
		}
		return result;
	}

第二、定义用于事务的拦截器

<interceptor name="transactionInterceptor" class="TransactionInterceptor">
	<param name="includeMethodsPrefix">act,deal</param>
</interceptor> 

includeMethodsPrefix参数用于定义以这些字符串开头的方法都采用事务控制。

第三、配置拦截器到Action上,这个就不用写了。
jxd1976 2007-11-12
colin4k 写道
另外以上代码是经测试通过的,今天加上了事务的控制,自己写了个Interceptor


这个零配置不错,把事务控制的代码也贴上来,学习一下。

web根目录下的index.jsp怎么处理?
z13585197077 2007-11-08
刚开始学Struts2,谢谢楼主,希望楼主以后多发点好帖
colin4k 2007-11-07
kusoft 写道
为什么不设置struts.enable.DynamicMethodInvocation = true,这样的话,不需要配置xml了

如果不配置xml,那拦截器怎么设置?全部用注解?那太繁琐了。
我觉得使用新技术不是为了用新技术而新技术,而是看是不是能提高效率。
colin4k 2007-11-07
zhyun29 写道
正在学习struts2,请问楼主struts.objectFactory.spring.autoWire这一项是什么意思?谢谢

这是定义struts2的action在注入业务逻辑类的时候使用那种方式匹配spring context中的对象,是基于名字匹配,如果设置成type,则是基于类型匹配
kusoft 2007-10-30
为什么不设置struts.enable.DynamicMethodInvocation = true,这样的话,不需要配置xml了
zhyun29 2007-10-30
正在学习struts2,请问楼主struts.objectFactory.spring.autoWire这一项是什么意思?谢谢
colin4k 2007-10-13
另外以上代码是经测试通过的,今天加上了事务的控制,自己写了个Interceptor
colin4k 2007-10-13
姜太公 写道
这个似乎有点问题吧,你的前提就是返回的全部是success的forward,这样太简单了点

你大概没有看清楚,返回的不是Success,返回的是"custom",并通过BaseAction里的属性target,指向
jsp
姜太公 2007-10-13
这个似乎有点问题吧,你的前提就是返回的全部是success的forward,这样太简单了点
发表评论

提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则

您还没有登录,请登录后发表评论

colin4k
搜索本博客
博客分类
最近加入圈子
最新评论