2012-08-08 56 views
1

我一直在查找此信息一段时间,但似乎没有太多在线。Struts2从jsp使用属性标记访问ActionContext

为了简单起见,我们如何通过<s:property/>标签访问ActionContext

基本上我想要得到的com.opensymphony.xwork2.ActionContext.locale(当前区域)

我尝试了所有这些,但没有一个似乎工作

<s:property value="#com.opensymphony.xwork2.ActionContext.locale"/> 
<s:property value="${#com.opensymphony.xwork2.ActionContext.locale}"/> 
<s:property value="%{#com.opensymphony.xwork2.ActionContext.locale}"/> 

多的组合。

谢谢

回答

3

您试过locale.toString()

Locale: <s:property value='locale.toString()'/> 

编辑

当你想从ActionContext把这个在您的action值:

public class FooAction extends ActionSupport { 
    ... 
    private String locale; // TODO: Getters and setters 
    ... 

    @Override 
    public String execute() { 
     ... 
     locale = ActionContext.getContext().getLocale().toString(); 
     ... 
    } 
} 

然后在你的JSP您可以访问到locale属性与<s:property>

<s:property value="locale"/> 

我希望它有帮助。

+0

我打算从Action上下文或简单的jsp <%= request.getLocale()%>中获取来自com.opensymphony.xwork2.ActionContext.locale的值。 你提供给我的那个人会取代价值堆栈中的那个。任何线索如何获得其他价值? – AbSoLution8 2012-08-09 19:14:46

+0

我编辑了我的答案:) – Pigueiras 2012-08-10 06:11:39

+0

如果您想在s:if test =“%{locale.toString()=='fa_IR')中检查它,还必须使用locale.toString()。 – 2013-11-16 11:59:41

2

更直接的方法是说:

<s:property value="@com.opens[email protected]().locale"/> 

对于这项工作的静态方法调用需要在struts.xml中启用

<struts> 
    <constant name="struts.ognl.allowStaticMethodAccess" value="true"/> 
    ... 
</struts> 
1

你可以使用它作为:

<%=session.getAttribute("WW_TRANS_I18N_LOCALE") %> 

这将直接从会话中获得语言环境