struts2中action实现Preparable接口的利弊

    最近在学习struts2,发现了很多惊喜,在设计上,确实很优秀,这两天在研究怎么做出一个好的架构,以后好用。
    今天看了包中的showcase例子,发现了一种新的配置action方法:
         < action  name ="edit-*"  class ="org.apache.struts2.showcase.action.EmployeeAction" >
      
< param  name ="empId" > {1} </ param >
            
< result > /empmanager/editEmployee.jsp </ result >
            
< interceptor-ref  name ="crudStack" >
                <
param  name ="validation.excludeMethods" > execute </ param >
            </
interceptor-ref >
        
</ action >
    当时昏了一下,用过这么多MVC的框架,第一次看到action还可以用*配的,很牛啊,自己配了一个,不好使,找原因,发现这里的EmployeeAction实现了com.opensymphony.xwork2.Preparable接口,并实现了prepare()方法,再试,成功。但发现个问题,如果这个action中还有其它的控制处理,而配置文件用的不是这种*形式,比如我的例子:
< action  name ="BookAction"  class ="com.sigon.crud.action.BookAction" >
            
< result  type ="redirect" > List.action </ result >
        
</ action >
< action  name ="Edit*"  class ="com.sigon.crud.action.BookAction"  method ="load" >
            
< param  name ="isbn" > {1} </ param >
            
< result > Edit.jsp </ result >
        
</ action >
    这里两个action用的是一个action类文件,而且BookAction实现了上面所说的Preparable接口,这时就需要将BookAction中的isbn初始化,否则在页面调用BookAction时出空指针异常
    而在实际项目中,一个Action处理多个控制逻辑是家常便饭,如果还想用这种形式,就要在声明isbn时赋初值,本例中是
private String isbn = "2";
    很明显,不稳妥。所以如何取舍,颇为困扰。
    如果有哪位大侠有好的方法,敬请赐教。






你可能感兴趣的:(struts2中action实现Preparable接口的利弊)