Action类值将一个方法传递给另一个方法

时间:2015-07-08 13:38:03

标签: java jsp struts2

值没有从方法一传递到方法二显示空指针异常请帮我这个。

在Struts2中,action类包含两个方法。一种方法产生另一种方法使用的值。在jsp页面中,我有两个按钮。一个调用第一个方法来填充值。另一个按钮调用同一类中的第二个方法,并使用先前填充的第一个方法的值并在jsp中显示值。但每个按钮单击动作类对象本身都会被销毁,并为每个按钮单击创建新对象。因此第一个方法值丢失,不能通过第二种方法引用。请告诉我解决方案。

Struts2动作类:

 public class CrudAction{

    private List<String> list;

    public List<String> getList() {

        return list;

    }
    //method one

    public String one(){

        list=new ArrayList<String>(); 
        list.add("one");
        list.add("two");
        return "success";

    }
   //method two


    public String two(){

        list.add("three");
        return "success";

    }

}    

struts.xml:

<action name="one" class="com.CrudAction" method="one">
  <result name="success">/index.jsp</result>
</action>
// for second method
<action name="two" class="com.CrudAction" method="two">
  <result name="success">/index.jsp</result>
</action> 

在jsp中:

第一种方法

<input  type = "button" value = "one" onclick = "javascript:location.href='one.action';"/>

第二种方法

<input  type = "button" value = "two" onclick"javascript:location.href='two.action';"/>

1 个答案:

答案 0 :(得分:0)

考虑HTTP协议是无状态的在第一个请求中创建的对象在第二个请求中无法引用因此有2个选项。

1.创建包含列表id的隐藏输入标记,这样当您第二次请求时,struts 2方法可以获取id(作为参数)。再次创建它很昂贵,但这取决于您的需求

2.在第一个请求中呈现jsp之前,可以使用ActionContext将对象放在会话范围中。 例如

Map<String,Object> session = ActionContext.getContext().getSession();
session.put("mylist",list);
in the second request you can access the object

Map<String,Object> session = ActionContext.getContext().getSession();
List<String> myList=(List)session.get("mylist");


Map<String,Object> session = ActionContext.getContext().getSession();
session.remove("mylist");