2015-04-14 3 views
1

Основная проблема заключается в том, что я использую Struts 1.0.2. Но я не могу его изменить. У меня проблема с атрибутом arraylist в моем jsp. Дисплей работает нормально, но я не получаю данные, созданные в arraylist в моей форме. В режиме отладки я вижу, что он никогда не приходит к getter моей собственности. Я нашел 2 решения в struts 1.0, но я не могу заставить их работать.Невозможно получить ввод данных в jsp, от jsp до формы, используя логику: итерация

ArrayList в моем ActionForm:

private ArrayList<AccountScreenBean> accountsScreen = new ArrayList<AccountScreenBean>(); 

Класс декларирование объекта счета в Arraylist:

public class Account implements Serializable, Cloneable { 
    private String bic; 

    public String getBic() { 
     return bic; 
    } 

    public void setBic(final String newBic) { 
     bic = newBic; 
    } 
} 

Звонок в моем JSP:

<logic:iterate name="BankAccountsActionForm" property="accountsScreen" id="accScreen" indexId="index"> 
<html:text name="accScreen" property="<%="accountsScreen["+index+"].bic"%>" size="18" maxlength="11" onkeyup="suivant(this,'partPays',11,'accScreen')" 
           styleClass="inscCB_SaisieTexte" /> 
</logic:iterate> 

на консоль ошибка:

weblogic.servlet.jsp.CompilationException: Не удалось собрать JSP /jsp/Contents/bankAccountsContent.jsp bankAccountsContent.jsp: 171: 81: Этот атрибут не распознается. . "размер =" 18" MaxLength = "11"

с accountsScreen подчеркнул

Я также попробовал другой путь в моем JSP:

<html:text name="accScreen" property="accountsScreen[${index}].bic" size="18" maxlength="11" 
           onkeyup="suivant(this,'partPays',11,'accScreen')" 
           styleClass="inscCB_SaisieTexte" /> 

На этот раз Ошибка консоли:

java.lang.IllegalArgumentException: Inv Алид индексируется свойство 'accountsScreen [$ {индекс}]

У вас есть решение одной из этих проблем или другой способ сделать это?

+0

Попробуйте использовать одиночные кавычки - 'property = '<% =" accountsScreen ["+ index +"]. Bic "%>''. –

+0

Это не работает лучше, но это не та же ошибка: «javax.servlet.jsp.JspException: метод getter для учетных записей свойств. Экран [1] .bic bean accScreen». accountsScreen - это имя стороны сервера, а bic имеет геттер, соответствующий стандартным правилам. Но accScreen - это имя jsp (в итерации логики struts), возможно, это лидерство. – jayjaypg22

+0

Это означает, что этот синтаксис правильный, и вам нужно исправить имена. –

ответ

0

Я думаю, что проблема с вашим первым «обходным решением» - это магия , из-за цитат. И это также кажется ненужным, так как вы уже должны иметь индексированный элемент в accScreen. Я бы попробовал

<logic:iterate name="BankAccountsActionForm" property="accountsScreen" id="accScreen" indexId="index"> 
    <html:text name="accScreen" property="bic" etc="..." /> 
</logic:iterate> 

вместо этого.

+0

На самом деле это был мой первый выстрел. Ошибка консоли отсутствует, но входное значение не задано. Но я думаю, что это работает в более поздней версии struts, скажем, по крайней мере 1.2. – jayjaypg22

+0

Странно. Это тот случай, когда он даже не вызывает геттер, или он еще один? – ytg

1

Александр М поможет мне найти решение для окончательного решения. Действительно, мне нужно было использовать простые кавычки вместо двойных. Тогда была проблема с доступом к свойству accountsScreen, потому что он не был и проиндексирован. Наконец, мне понадобилось два разных имени для getter, даже если аргументы были не одинаковыми. Поэтому я добавляю индексированный префикс к индексированному getter.

В СПЯ:

<html:text name="BankAccountsActionForm" property='<%="indexedAccountsScreen["+index+ "].partAccountNumber2"%>' 

в виде Java, мне нужно индексированное свойство, чтобы получить доступ к элементу accountsScreen ArrayList.Таким образом, у меня был геттер для доступа к элементу по индексу:

public void setAccountsScreen(int index, AccountScreenBean accScreen) { 
    this.accountsScreen.add(index, accScreen); 
} 
public AccountScreenBean getIndexedAccountsScreen(int index) { 
    return accountsScreen.get(index); 
} 

Спасибо каждому.