【问题标题】:Action property of interface type接口类型的动作属性
【发布时间】:2011-01-31 13:39:06
【问题描述】:

据我了解,Action 的本质是可以使用请求参数值推送属性。而且,一个很棒的特性是 Struts2 允许您根据 Class 类型属性直接填充参数值;)

假设存在如下的 Action 和属性类, 类动作扩展 ActionSupport { 用户用户;

   @Action(value="hello" {@result=(.......)})
   public void execute() {
      ........
   }
    .....
   public void setUser(User user) {
     this.user = user;
   }
   public User getUser() {
     return this.user;
   }
}

class User {
   String name;
    .....
   public void setName(String name) {
     this.name = name;
   }
   public String getName() {
     return this.name;
   }
}

您可以通过这样做来填充 User 类属性。

http://...../hello.action?user.name=John or via jsp page

然后,我意识到实际上有人将 Action 属性设置为 Interface 类型。我的问题是这背后的原因是什么。如果有示例代码演示那就太好了。

提前致谢!

【问题讨论】:

    标签: struts2


    【解决方案1】:

    抱歉,您的问题没有多大意义。 澄清:

    • “属性”:在 Java 中,类的“属性”是可以通过 getter/setters 方法(setXXX() / getXXX() => 属性 XXX)访问的东西,通常(但不一定)对应到一个私有字段。

    • 在 Struts2 中,您有一个 Action 对象,并且通常(不一定,并非总是)从请求(通过“参数”拦截器)填充(设置)属性,然后在视图阶段从JSP(或其他)页面。 因此,在您的示例中,对于请求 http://...../hello.action?user.name=John ,Struts2 将尝试在您的操作中(...实际上在您的值堆栈中)找到具有属性“名称”的属性“用户” , 并尝试设置它(如果类型是可转换的)。也就是说,他会尝试调用类似 yourAction.getUser().setName("John") 的东西。 Struts2 不知道 - 不关心 - 属性“用户”或“名称”是什么类型,即使它们是否是真实字段。 (不过,它们的行为应该是“bean”:即它们应该有一个默认构造函数)。

    • 为什么以及何时应该编写接口而不是具体的类,这在任何 Java 书籍中都有解释,这只是一个标准的良好实践,并且有大量关于它的页面。它与 Struts2 无关。在这种情况下,对于一个动作,人们通常只对某些“服务”字段感兴趣,这些字段通常是长期存在的(可能是单例),不会被动作本身(也不是请求!)实例化。因此,这些接口不是我们在这里考虑的属性,它们(通常)不会公开公开,通常不会填充或从客户端读取。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-28
      • 1970-01-01
      • 1970-01-01
      • 2019-11-26
      • 1970-01-01
      • 2017-09-17
      相关资源
      最近更新 更多