Итератор struts2, фиксирующий определенные значения

Привет, позвольте мне сказать вам, что я много искал, но я не мог найти то, что хотел

вот сценарий

в моем jsp есть таблица, которая загружается через итератор, который ArrayList<Report>

отчет имеет три атрибута: параметр, наблюдение, разработанный

в JSP я покажу значения первого и третьего столбца через итератор

<s:iterator value="ReportList" status="status" var="obj">
   <tr>
      <td><s:property value="%{#obj.parameter}" /></td>
      <td><s:textfield theme="simple" name="valOfSim" /></td>
      <td><s:property value="%{#obj.designed}" /></td>
   </tr>
</s:iterator>
Parameter           observation                designed
X                                                10
y                                                11
Z                                                12

теперь мне нужно зафиксировать второе значение, которое было введено, пожалуйста, помогите!

РЕДАКТИРОВАТЬ: мой код

Позвольте мне объяснить, что сначала будет вызван метод предварительной загрузки, и значения будут предварительно заполнены через ArrayList<Obj>, а затем пользователь введет значение для наблюдения, а затем я зафиксирую это через это

<td><s:textfield theme="simple" name="obj[%{#status.index}].observation" /></td>

после этого появится кнопка отправки, при нажатии которой будет вызываться метод отправки класса действия

который печатает значение, введенное пользователем (здесь я получаю NULL)

import mypro.web.utility.SpringServiceLocator;

public class myAction extends ActionSupport implements      
ModelDriven,SessionAware,ServletRequestAware,Preparable  {
private Map<String, Object> session;
private Model  model = new Model();

public void prepare()
{

            Obj obj = new Obj();
    Obj obj2 = new Obj();
    Obj obj3 = new Obj();

    obj.setDesigned("10");
    obj.setParameter("X");
    model.getReportList().add(obj1);


    obj.setDesigned("11");
    obj.setParameter("y");
    model.getReportList().add(obj2);

            obj.setDesigned("12");
    obj.setParameter("Z");
    model.getReportList().add(obj3);
   }



  public String preload()
   {

  return "success";
   }


  public String submit()
   {


  System.out.println("------------------------------------------------------  
  &&&&&&&&&:"+model.getReportList().size());
    for(Obj obj : model.getReportList)
    {
        System.out.println("the value is to be checked"+obj.getObservation());//value which will be entered by user
        System.out.println("the value is to be checked"+obj.getRefcode()); //value which was added in the prepare method
    }



        return "success";
      } 





       public Object getModel() {

    return model;
}

person user1651070    schedule 22.11.2012    source источник
comment
в чем именно твоя проблема?   -  person Jaiwo99    schedule 22.11.2012
comment
как вы можете видеть во фрагменте, отображающем таблицу в jsp, первый и третий столбцы извлекаются через ArrayList‹obj› второй столбец, который пуст, будет введен пользователем, поэтому я хочу зафиксировать эти значения через ArrayList‹obj› мне нужно знать как?   -  person user1651070    schedule 22.11.2012
comment
Итак, вы хотите отправить все поля все время или для каждой строки?   -  person Jaiwo99    schedule 23.11.2012
comment
Вы пытались создать действие с геттером/сеттером для свойства с именем myCollection, которое является коллекцией... например, ArrayList? Тогда каждое свойство можно было бы назвать myCollection в форме, и вы могли бы подумать, что они будут добавлены в myCollection, а затем в execute() вы бы сделали что-то, чтобы взять содержимое myCollection и поместить его в свои объекты-отчеты.   -  person Quaternion    schedule 23.11.2012
comment
Как видите, я ответил, чтобы получить именно такой результат :/ Вы пробовали? Это работает ? У тебя какие-то проблемы ?   -  person Andrea Ligios    schedule 23.11.2012
comment
@Andrea Ligios Спасибо за ответ, сообщим, работает ли он.   -  person user1651070    schedule 23.11.2012


Ответы (1)


Измените это:

<s:textfield theme="simple" name="valOfSim" />

к этому:

<s:textfield theme="simple" name="obj[%{#status.index}].observation" value="" />

Это будет

  1. привяжите свое текстовое поле к полю observation элемента obj;
  2. сохранить номер строки;
  3. установка отображаемого значения пустым (не знаю, почему, но если это то, что вы хотите...)

Таким образом, ЕСЛИ ваше действие имеет setter для вашего элемента obj (а не только геттера), когда вы отправите форму, содержащую ваши итерированные элементы, вы получите все значения observation, вставленные пользователем в ваш ArrayList<Obj>...

person Andrea Ligios    schedule 22.11.2012
comment
привет, Андреа, я попробовал твой способ, он не работает, я получаю нулевые значения, у меня есть геттер и сеттер в моем действии, но я все еще не могу получить какие-либо значения - person user1651070; 23.11.2012
comment
Вы вызываете одно и то же действие после submit или другое? Если другой, вам нужно объявить List<obj> и на втором действии (по крайней мере, с сеттером). И убедитесь, что у класса obj тоже есть сеттеры, такие как setObservation. - person Andrea Ligios; 23.11.2012
comment
И, пожалуйста, проверьте стек перехватчиков, который вы используете для своих действий: я уже видел людей, ссылающихся на ОДИН перехватчик, полагая, что они добавили его ко всему стеку... - person Andrea Ligios; 23.11.2012
comment
Я использую стек перехватчика по умолчанию, а что касается ваших предыдущих вопросов, я использую другой метод с одним действием, и у меня есть установщик, но все еще не удается получить Nulls - person user1651070; 23.11.2012
comment
Можете ли вы опубликовать свой код действия? Это должно работать ... есть одна ошибка на пути :) - person Andrea Ligios; 23.11.2012
comment
Аааа ок я понял. Переместите ВСЕ СВОИ ВЕЩИ из prepare() в preload(). Подготовка вызывается перед КАЖДЫМ методом, а затем даже перед submit(), стирая все ваши пользовательские данные из jsp из-за повторной инициализации. ИЛИ, если вы хотите, чтобы инициализация была подготовлена, переместите метод отправки в другое действие. - person Andrea Ligios; 23.11.2012
comment
спасибо за подсказку о preparable, я удалил его и использую сеанс, и я сделал небольшое изменение вместо var, я использовал значение ‹s:textfield theme=simple name=ReportList[%{#status.index}].observation value= /› - person user1651070; 23.11.2012