我发现Struts2的ModelDriven存在问题

我发现Struts2的ModelDriven存在问题,struts2,model-driven,Struts2,Model Driven,请下载并运行它。 我认为这是值得一试的,尽管这会有点烦人 在action类的execute方法中,如果您通过返回bean的方法设置bean,Modeldriven将无法在JSP中工作(将无法工作,因此您必须像这样键入bean实例名称;) 但是如果您设置bean的字段值,Modeldriven将起作用 我知道你可能不相信我,认为我做错了什么。 但这不是真的!试试看 public class DefaultClass extends ActionSupport implements ModelDri

请下载并运行它。 我认为这是值得一试的,尽管这会有点烦人

在action类的execute方法中,如果您通过返回bean的方法设置bean,Modeldriven将无法在JSP中工作(
将无法工作,因此您必须像这样键入bean实例名称;

但是如果您设置bean的字段值,Modeldriven将起作用

我知道你可能不相信我,认为我做错了什么。 但这不是真的!试试看

public class DefaultClass extends ActionSupport implements ModelDriven<TestBean>    {
        TestBean test = new TestBean();
        DAO db = DAO.getInstance();

        public String access() throws Exception {
            //Beans setter doesn't work!
            setTest( db.getTest() );

            return SUCCESS;
        }
        public String access2() throws Exception    {
            //Field setter works! 
            test.setA(db.getA());
            test.setB(db.getB());

            return SUCCESS;
        }
公共类DefaultClass扩展ActionSupport实现模型驱动{
TestBean test=新的TestBean();
DAO db=DAO.getInstance();
公共字符串访问()引发异常{
//豆子设定器坏了!
setTest(db.getTest());
回归成功;
}
公共字符串access2()引发异常{
//现场设置器工作!
test.setA(db.getA());
test.setB(db.getB());
回归成功;
}
我不知道我刚刚发现了什么。所以我问。作为我自己的回答,如果我把bean推到valuestack Modeldriven中,它就会工作

我想知道为什么这毫无疑问。我认为这是一个严重的问题

我不知道我刚刚发现了什么,所以我问了这个问题

你问了这个问题,但忽略了给你的答案…模型驱动的拦截器位于prepare拦截器之后,但在实际执行操作之前很久。这意味着,如果你想检索模型类的实例,你必须使用“prepare”方法来做这项工作。当getModel()是在你的动作中调用的,它将在你的动作方法中的任何逻辑之前引用TestBean。在你链接的另一个问题中,你提到你期望顺序不同,因为你在一本书中读到过它,它是哪本书?它不是Struts 2在动作中,因为在那本书中ey明确声明(我认为是第65页)——

我们应该注意一个要避免的陷阱。 当的execute()方法 您的模型驱动操作已被删除 调用后,该框架已获得 对模型对象的引用,其中 它将在整个请求过程中使用


我不确定我是否理解你的要求。你提供的名称似乎与你提供的代码不匹配。你是说你不能访问
,例如,你必须编写
,这是正确的。请下载我的WAR文件并运行它。你会明白我的观点吗