如何从Struts 2标签访问servlet应用程序上下文?

时间:2012-03-01 08:37:30

标签: java jsp struts2

如何在struts中访问jsp标签? 例如:

<s:select name="country" list="<%=countryList%>"  headerKey="0" headerValue="Country"
                  label="Select your country" required="true"/>

例外:

  

消息:/jsp/index.jsp(35,2)根据TLD或属性   标签文件中的指令,属性列表不接受任何表达式。   countryList是一个ArrayList。

2 个答案:

答案 0 :(得分:2)

因为S2标签不允许在其中使用此表达式,所以异常清楚地表明原因。 更多Tag需要List / ArrayList或任何集合列表作为数据源,并且在ONGL机制中构建将为您完成剩余的工作。

你有一个干净的方法来实现这个在你的动作类中创建一个名为countryList的属性,该属性应该具有List / Map的数据类型,并为这个属性提供一个getter和setter。用所需的List填充List动作类中的数据。

行动类

public class MyAction extends ActionSupport{

  private List<String> countryList;
  // getter and setter for countryList

  public String execute() throws Exception{
   countryList=new ArrayList<String>();
   // Add values to list
   return SUCCESS;
 }
}

现在,您需要在JSP中执行以下操作

<s:select name="country" list="countryList"  headerKey="0" headerValue="Country"
                  label="Select your country" required="true"/>

因此,当OGNL将此list="countryList"作为数据源时,它将在您的操作类中查找名为getCountryList()的方法,并将使用该数据填充select标记。

希望这能让你明白这是如何运作的。有关详细信息,请参阅官方文档

select tag

答案 1 :(得分:1)

您不需要为列表使用java scriptlet。

您必须使用OGNL表达式。如果您的操作具有getCountryList方法,那么您需要做的就是:

<s:select name="country" list="countryList"  headerKey="0" headerValue="Country"
                  label="Select your country" required="true"/>

您应该搜索一些有关如何在struts中使用OGNL的文档。它非常强大。