2011-03-24 57 views

回答

4

Anshul,

你有一些正确的东西在你的implementation.For Struts2中,我们可以看到它在下列方式

  1. ValueStack的
  2. OGNL

值栈是一个虚拟的堆栈在Struts2框架和一个中心位置,所有与请求处理相关的数据将由Framework放置。在Struts2中,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会找到它。

我希望这会帮助你

+0

感谢您给我更多关于价值堆栈的想法。但有时当我使用OGNL表达式时,它不会打印值堆栈的值。像这在某些情况下不起作用,并且它通过使用 Anshul 2011-03-24 09:03:55

+0

是的!默认情况下值是放在值栈上,但你可以把值放在session,attribute等中,这样如果值没有存储在值栈中但是属性den value =“%{firstname}”/>将不起作用,因为它只是解决价值堆栈,所以我们需要告诉OGNL在哪里尝试找到valuestack旁边的数据值。希望它会给你想法 – 2011-03-24 09:09:58

相关问题