我想知道,是否可以动态地将值设置为静态参数
<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}
显示为常规文本。
请注意,它显示
${app_Id}
作为常规文本到底是什么意思。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>
您可以获得更多详细信息配置结果中的参数
您可能已经(错误地)手动编写了 getter,而不是让 IDE 为您完成。
变量
app_Id;
必须有一个吸气剂getApp_Id()
,而你可以有类似getapp_Id()
或get_app_Id()
之类的东西......但是如果你不发布你的操作代码,我们怎么知道它?!
此外,考虑更改变量(从现在开始)以尊重约定,即希望它们采用驼峰式命名,而不是下划线分隔...然后
appId
表示变量,getAppId()
表示 getter。
尝试这样做..
<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">
试试这个。
staticParams
拦截器。
此拦截器使用操作配置中定义的静态参数填充操作。如果操作实现了
,静态参数的映射也将直接传递给操作。静态参数将添加到请求参数映射中,除非Parameterizable
设置为merge
。false
参数通常使用
中的<param>
元素定义。struts.xml
它展示了如何将此拦截器配置到您的操作配置中。
例如:
<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 表达式的参数值。