在使用struts2的时候,有属性驱动和模型驱动这两种。但是我看到的很多应用中这两种好像都没有使用,而是通过另一种方式,即和模型驱动一样,首先定义一个普通的javaBean,然后在Action中使用get和setter方法获得这个javaBean,这样也以的,它的原理是什么我不是很明白,这个有点像spring的Ioc,但是在使用在使用spring+struts2整合的时候,这个javaBean并没有在application.xml文件中做任何的配置,也就是它没有注入到Action,而是直接就get和setter一下,直接就在Action中用它了。我说的并不是很清楚,请高人耐心一点,先谢谢了。。
struts2的action当然可以作为bean 交个spring管理context.xml配置文件:
<bean id="loginAction" class="login.LoginAction"
scope="prototype">
<property name="userService" ref="userService" />
</bean>struts。xml <package name="login" extends="struts-default"
namespace="/login">
<action name="Login" class="loginAction">
<result name="success">/login/success.jsp</result>
<result name="error">/login/error.jsp</result>
</action></package>
JavaBean也只是一个普通的java类action中关联这个类作为一个关联属性对待,自然不用注入!
属性驱动。举个例子,页面上有个标签 name="user" value="admin"。最后提交到后台会以user=admin的形式。被拦截器获悉后,它就会查找action中是否有user这个参数,如果找到就调用setUser将admin赋给user.当请求返回的到jsp页面时 在将jsp编译成servlet,如果页面中有name="user"的标签,或是直接用${user}的时候,拦截器会调用action中user参数的getUser方法将user的值通过Responce发送出去。
模型驱动(我理解的模型驱动就是用拦截器传递一个javaBean)原理一样。只不过需要两次调用get set 方法。先调用javaBean的 再调用具体参数的。
不知道说清楚了没,有错误请大家指出。
<bean id="userService" class="com.test.service.impl.UserServiceImpl">
<bean id="deleteUserAction" class="com.test.action.user.DeleteUserAction">
<property name="userservice" ref="userService"></property>
</bean>
UserServiceImpl的代码如下:
import java.util.List;
import com.test.bean.User;
import com.test.dao.UserDao;
import com.test.service.UserService;
public class UserServiceImpl implements UserService {
private UserDao userdao;
public void setUserdao(UserDao userdao) {
this.userdao = userdao;
}
public void delete(User user) {
this.userdao.removeUser(user); } public List<User> findAll() {
return this.userdao.listAllUser();
} public User findById(Integer id) {
return this.userdao.findUserById(id);
} public void save(User user) {
this.userdao.saveUser(user);
} public void update(User user) {
this.userdao.updateUser(user); }}
它算是一个普通的java类吗?它为什么要注入到DeleteUserAction这个类中呢?
import com.opensymphony.xwork2.ActionSupport;
import com.test.bean.User;
import com.test.service.UserService;public class SaveUserAction extends ActionSupport {
private static final long serialVersionUID = 1L;
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;
}
@Override
public String execute() throws Exception {
this.userservice.save(this.user);
return SUCCESS;
}
}
是不是想问,程序中new youbean,和在spring。xml中定义注入的区别?