2015-07-08 2 views
0

Значение не переходит от метода один к методу two показывает исключение нулевой указатель Пожалуйста, помогите мне с этим.Значение класса действия, передающее один метод другому методу

В классе действий Struts2 содержатся два метода. Один метод дает значение, которое используется другим методом. На странице 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';"/> 
+0

Не ставьте один и тот же вопрос несколько раз. Сохраните свой список где-нибудь (например, сеанс). –

+0

ya Я тоже думал об этом .. но есть ли другой способ сделать это ... как переиндексировать какой-то конкретный список или переменную ... возможно ли, что struts 2 имеют некоторые методы для этого .. им приятно слышать .. если что-то существует –

+0

Ваша проблема не имеет ничего общего с каркасом под рукой. Вам нужно сохранить свой список где-нибудь или опубликовать его из jsp. –

ответ

0

Рассмотрение протокола HTTP является апатридом. Объект, который вы создаете в первом запросе, не может ссылаться во втором запросе. Следовательно, существует 2 варианта.

1. Создайте скрытый тег ввода, содержащий идентификатор списка, так что, когда вы запрашиваете второй раз, метод struts 2 может получить идентификатор (в качестве параметра). Это очень дорого, но это зависит от ваших потребностей.

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"); 
+0

Спасибо за ур подробный код explainations.it действительно помог мне хорошо. но я прошу добавить @SuppressWarnings («unchecked») в этой строке List myList = (List) session.get («mylist»); скажите мне, что с этим делать. –

+1

Он просит генерики – Mudassar

+0

yes.i дал список , хотя он показывает, чтобы добавить @ suppress.can u изменить код ur с помощью дженериков ... это здорово, если вы сделаете это и гораздо полезнее .. –