我想知道,是否可以动态地将值设置为静态参数
<action name="TestApp_*" class="test.TestApp" method="{1}">
<param name="app_Id">Dynamic value here</param>
<result name="input">WEB-INF/jsp/test/testView.jsp</result>
</action>
我试过
<action name="TestApp_*" class="test.TestApp" method="{1}">
<param name="app_Id">${app_Id}</param>
<result name="input">WEB-INF/jsp/test/testView.jsp</result>
</action>
不工作。它将${app_Id}
显示为常规文字。
答案 0 :(得分:0)
请注意确切的含义。它将${app_Id}
显示为常规text.Struts2提供了这种灵活性,您可以动态设置param
值。
您只需在动作类中设置这些值,就可以将它们用作占位符。
public class MyAction extends ActionSupport {
private int app_Id;
public String execute() {
// you execute logic
this.app_Id= 123;
return SUCCESS;
}
// getter and setter for app_Id
}
您可以在结果配置中使用此app_Id
<action name="TestApp_*" class="test.TestApp" method="{1}">
<param name="app_Id">${app_Id}</param>
<result name="input">WEB-INF/jsp/test/testView.jsp</result>
</action>
您可以获得更多详细信息parameters-in-configuration-results
答案 1 :(得分:0)
你可能已经手工编写(错误地)吸气剂,而不是让IDE为你做。
变量app_Id;
必须有一个getter getApp_Id()
,而你可能有getapp_Id()
或get_app_Id()
...但是如果你有什么我们应该知道它不发布您的行动代码?!
另外,考虑将变量(从现在开始)更改为尊重约定,希望它们使用camelCased,而不是以下划线分隔...然后appId
表示变量,getAppId()
表示吸气剂。
答案 2 :(得分:0)
尝试这样做..
<result type="redirect">
<param name="location">WEB-INF/jsp/test/testView.jsp</param>
<param name="inputName">app_Id</param>
</result>
在jsp页面中,您可以直接使用此值,如
<s:properties value="app_Id">
试试这个。
答案 3 :(得分:-1)
查看staticParams
拦截器。它显示了如何将此拦截器配置为您的操作配置。例如
<action name="someAction" class="com.examples.SomeAction">
<interceptor-ref name="defaultStack">
<param name="staticParams.parse">true</param>
<param name="staticParams.overwrite">false</param>
</interceptor-ref>
<param name="num">${numValue}</param>
<result name="success">good_result.ftl</result>
</action>
这使拦截器能够从动作配置中解析 OGNL表达式的参数值。当然,需要参数值的getter和参数名称的setter来检索参数的实际值。