Struts2 接口类型的操作属性

Struts2 接口类型的操作属性,struts2,Struts2,据我所知,动作的本质是可以通过请求参数值推送属性。而且,一个奇妙的特性是Struts2允许您直接根据类类型属性填充参数值;) 假设存在如下所示的Action和property类, 集体诉讼扩大了行动支持{ 用户 @Action(value="hello" {@result=(.......)}) public void execute() { ........ } ..... public void setUser(User user) {

据我所知,动作的本质是可以通过请求参数值推送属性。而且,一个奇妙的特性是Struts2允许您直接根据类类型属性填充参数值;)

假设存在如下所示的Action和property类, 集体诉讼扩大了行动支持{ 用户

   @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;
   }
}
您可以这样做来填充用户类属性

http://...../hello.action?user.name=John or via jsp page
然后,我意识到,实际上有人将动作属性作为接口类型。我的问题是,这背后的原因是什么。如果有一个示例代码演示它,那就太好了


提前谢谢!

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

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

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

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