我的Action类preprocess()
和getThresholdData()
中有两个方法:
我在List<String>
方法中设置了preprocess()
变量(在页面加载时调用);
然后从JSP页面提交表单,并调用getThresholdData()
。
JSP:
<body>
<s:form action="getThresholdDataConfigureTspThreshold">
<s:select list="tspNames" label="Select TSP:" name="tspName"></s:select>
<s:radio list="{'Default', 'Latest'}" label="Select Threshold type:"
name="thresholdType"></s:radio>
<s:submit value="Submit"></s:submit>
</s:form>
</body>
页面加载后,立即在操作类的
tspNames
方法中设置preprocess()
(要迭代的列表),如下所示:<a href="/gma/preprocessConfigureTspThreshold" />
动作类:
public class ConfigureTspThresholdAction extends ActionSupport{
private static final String DISPLAY = "display";
private Map session;
private List<String> tspNames;
private List<String> thresholdParametres;
private String tspName;
private String thresholdType;
public String preprocess() {
// Get tspNames from server after Table creation
tspNames = new ArrayList<String>();
tspNames.add("RELIANCE");
tspNames.add("AIRTEL");
tspNames.add("TATA");
tspNames.add("BSNL");
tspNames.add("MTNL");
session.put("tspNames", tspNames);
return DISPLAY;
}
public String getThresholdData(){
// Get parametres from server after creating table
thresholdParametres = new ArrayList<String>();
thresholdParametres.add("1");
thresholdParametres.add("2");
thresholdParametres.add("3");
thresholdParametres.add("4");
thresholdParametres.add("5");
System.out.println("************" + tspNames);
return DISPLAY;
}
/** GETTER AND SETTERS*/
}
struts.xml:
<action name="*ConfigureTspThreshold"
class="gma.struts.ConfigureTspThresholdAction" method="{1}">
<result name="display">pages/ConfigureTspThresholdInput.jsp</result>
</action>
流程是:
在设置列表的地方调用JSP加载
preprocess
。用户填写并提交表单,一些工作在服务器端完成,并且用户重定向到同一JSP。
但是,由于在
tspNames
方法中设置的列表preprocess()
即将出现,而无法显示JSP,因此出现错误。在这里,当我尝试打印列表时
System.out.println("************" + tspNames);
我在第一个函数中设置的值是
null
。为什么会这样呢?提交表单后变量值会丢失吗?
会议概念有什么需要做的吗?
最佳答案
您正在尝试重新发明轮子;您需要实现Preparable Interface
,以充分利用框架功能;
您的初始化代码将放置在prepare()
方法中(它类似于您的自定义preprocess()
方法,但由知道它的框架进行管理):
实现此接口的操作类必须重写prepare
方法。 prepare方法将始终由Struts 2调用
每当为框架调用任何方法时,框架的准备拦截器
动作类以及在视图之前验证失败的情况
呈现。
您也不需要会话,但这是您的选择。
关于java - 在第二个 Action 中访问 Action 类变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20089382/