我的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/

10-11 02:34