【问题标题】:How the data transfer from the action class to Jsp page in struts2struts2中action类的数据如何传递到jsp页面
【发布时间】:2011-03-24 07:08:33
【问题描述】:

struts2中action类的数据如何传递到jsp页面。 在将控制权转移到 jsp 页面之前,是否在动作类内部构建了任何类型的堆栈,或者使用了其他机制。

【问题讨论】:

    标签: java struts2


    【解决方案1】:

    安舒尔,

    你的实现是正确的。对于 Struts2,我们可以通过以下方式看到它

    1. 价值栈
    2. OGNL

    值栈是 Struts2 框架中的一个虚拟栈,是框架放置所有与请求处理相关的数据的中心位置。在 Struts2 中,Actions 也被视为数据载体,所以当action 完成了它的工作,它被放置在值堆栈的顶部。

    让我们在行动中有这样的东西

    public class MyAction extends ActionSupport{
    
      private String firstname;
      private String lastname;
    
      public void setFirstName(firstname){
         this.firstname=firstname
      }
    
     public void setLastName(lastname){
         this.lastname=lastname
      }
    
    public String getFirstName(){
       return firstname;
    }
    
    public String geLastName(){
       return lastname;
    }
    
     public String execute() throws Exception{
                 //action logic filling first name and last name from database etc.
                 return SUCCESS;
     }
    }
    

    现在当动作返回后,逻辑框架会将动作实例放在值堆栈的顶部,firstnamelastname 将在它的顶部。

    so now when we try to access these values in jsp something like
    <s:textfield name="firstname" value= "%{firstname}"/>
    

    这里(%{firstname}) OGNL 将到位,它会尝试查看值堆栈中是否有名称为firstname 的属性,因为操作位于值堆栈的顶部并且它的属性名称为firstname OGNL 会在其中找到它。

    希望对你有帮助

    【讨论】:

    • 感谢您让我更好地了解 Stack 的价值。但是有时当我使用 OGNL 表达式时,它不会打印值堆栈的值..?像 这在某些情况下不起作用,它使用
    • 是的!!!默认情况下,值放在值堆栈上,但您可以将值放在会话、属性等中,因此如果值未存储在值堆栈中但在属性 den value= "%{firstname}"/> 中将不起作用,因为它仅解析为 valuestack,所以我们需要告诉 OGNL 在哪里尝试找到 valuestack 旁边的数据值。希望它能给你一些想法
    猜你喜欢
    • 1970-01-01
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多