2010-03-25 114 views
0

通过我的内容,Action的本质是可以将属性推送到请求参数值。和,一个精彩特征是Struts2的允许直接填充针对类类型属性的参数值;)接口类型的动作属性

假设有如下存在操作和属性的类,类 行动延伸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属性作为接口类型。我的问题是背后的原因。如果有示例代码证明它会很好。

在此先感谢!

回答

1

对不起,但你的问题没有多大意义。 澄清:

  • “属性”:在Java中的一类的 “属性” 的东西,通过吸气/ setter方法方法是入店(的setXXX()/的getXXX()=>属性XXX),tipically(但不一定)对应于私人领域。

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

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