【问题标题】:Action class value passing one method to another method将一种方法传递给另一种方法的动作类值
【发布时间】:2015-07-08 13:38:02
【问题描述】:

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

在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';"/>

【问题讨论】:

  • 不要多次发布同一个问题。将您的列表存储在某处(例如会话)。
  • 是的,我也想过.. 但是有没有其他方法可以做到这一点...比如重新渲染一些特定的列表或变量... struts 2 是否有可能有一些方法。 . 我很高兴听到 .. 如果有什么存在
  • 您的问题与手头的框架无关。您需要将列表存储在某处或从 jsp 发布。
  • 当然有。但其他所有方式都更糟。将其保存在数据库或文件上然后读取它,或通过请求发布整个列表,将其注入页面,将其发布回来(但它可能被黑客入侵),或使用 localHistory,或 sessionHistory,或 cookie 等...只需使用会话。
  • 感谢@AndreaLigios 的回复。现在我认为使用 session 对我的要求来说是个好主意。

标签: java jsp struts2


【解决方案1】:

考虑到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");

【讨论】:

  • 感谢您详细的代码解释。它对我很有帮助。但有一件事它要求我在这一行中添加 @SuppressWarnings("unchecked") List myList=(List)session.get("mylist");告诉我该怎么做。
  • 它要求仿制药
  • yes.i 给了 List 即使它显示添加@suppress.你可以用泛型修改你的代码......如果你这样做会更好并且更有帮助..跨度>
猜你喜欢
  • 1970-01-01
  • 2018-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-07
  • 2017-07-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多