在使用struts2的时候,有属性驱动和模型驱动这两种。但是我看到的很多应用中这两种好像都没有使用,而是通过另一种方式,即和模型驱动一样,首先定义一个普通的javaBean,然后在Action中使用get和setter方法获得这个javaBean,这样也以的,它的原理是什么我不是很明白,这个有点像spring的Ioc,但是在使用在使用spring+struts2整合的时候,这个javaBean并没有在application.xml文件中做任何的配置,也就是它没有注入到Action,而是直接就get和setter一下,直接就在Action中用它了。我说的并不是很清楚,请高人耐心一点,先谢谢了。。

解决方案 »

  1.   

    使用在使用spring+struts2整合的时候,这个javaBean并没有在application.xml文件中做任何的配置?
    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>
      

  2.   

    struts2中的javabean只是在页面中体现!
    JavaBean也只是一个普通的java类action中关联这个类作为一个关联属性对待,自然不用注入!
      

  3.   

    一切的工作都是由struts2的参数拦截器来完成 的。
    属性驱动。举个例子,页面上有个标签 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的 再调用具体参数的。
    不知道说清楚了没,有错误请大家指出。
      

  4.   

    如果是这样的话,这是在application.xml中一条配置,
    <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这个类中呢?
      

  5.   

    这javaBean没有在application.xml中做任何的配置,只是set 和get一下就可以直接的用了,代码如下:
    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;
    }
    }
      

  6.   

    struts2的模型驱动要实现ModelDriver<T>这个接口,并且还必须重写getModel()这个方法,而我说的意思是不需要实现接口,直接就对一个javaBean进行set和get一下就可以使用了
      

  7.   

    我晕啦你到底要问什么啊?
    是不是想问,程序中new youbean,和在spring。xml中定义注入的区别?
      

  8.   

    楼主..估计页面参数是这样传递的吧  user.XXX 这也算模型驱动..不过不用实习那个接口