Запись строкового свойства объекта с - PullRequest
0 голосов
/ 16 сентября 2010

В моей форме есть объект, который содержит различные строковые свойства.

Когда я хочу напечатать это в форме JSP, я могу сделать это с

<c:out value="${form.company.address}" />

, который отлично работает.

Теперь я хочу создать поле ввода HTML. Но когда я пишу

<html:text property="company.address" />

Я получаю сообщение об ошибке

Caused by: javax.servlet.jsp.JspException: No getter method for property company.address of bean org.apache.struts.taglib.html.BEAN

Знаете ли вы, как я могу создать поле ввода HTML с адресом моей компании?

У моего боба есть необходимые соответствующие геттеры и сеттеры.

Ответы [ 3 ]

1 голос
/ 17 сентября 2010

Правильный способ перевести это:

<c:out value="${UFForm.company.address}" />

в Struts:

<html:text name="UFForm" property="company.address">

Это означает, что есть запрос с именем UFForm с бином, содержащим методgetCompany() (который, как я предполагаю, возвращает объект Company), и у которого, в свою очередь, есть getAddress() геттер (если вы понимаете, о чем я).Короче говоря, bean-компонент из request / session UFForm, TagLib обращается к getCompany().getAddress();

PS Надеюсь, что getAddress() не вернет null else <html:text /> сгенерирует исключение.


Edit Чтобы объяснить, что я делал выше:

public class Company implements Serializable {

    private String address;

    //Setter
    public void setAddress(String address) {
        this.address = address;
    }

    //Getter
    public String getAddress() { return this.address; }
}

public class UFForm implements Serializable {

    private Company company;

    public void setCompany(Company company) {
        this.company = company;
    }

    public void getCompany() {
        if (this.company == null) {
            setCompany(new Company());
        }

        return this.company;
    }
}

То, что я делал выше в <html:text /> эквивалентно

UFForm ufForm = ....;
String property = ufForm.getCompany().getAddress();
0 голосов
/ 17 сентября 2010

Когда вы получаете значение для текстового поля с помощью:

<html:text property="company.address" />

На самом деле вы говорите Struts:

formObject.getCompany().getAddress();

Таким образом, вы должны иметь геттер длякомпания (которая не должна возвращать ноль, иначе следующая операция не удастся) и установщик адреса для объекта компании.Сеттеры / геттеры должны быть публичными.Это должно быть уже так, поскольку вы можете сделать следующее без ошибок:

<c:out value="${UFForm.company.address}" />

Теперь, что меня беспокоит, так это эта часть: ${UFForm..Когда вы используете JSTL, вы обращаетесь к форме явно.С <html:text> вы получаете доступ к свойству формы неявным образом.Эта неявная форма обеспечивается тегом <html:form>.Есть ли у вас <html:text> внутри <html:form>?

Компонент формы расположен / создан / открыт на основе спецификации компонента формы для связанного ActionMapping, поэтому проверьте также свое отображение.

0 голосов
/ 16 сентября 2010

У вашего компонента должны быть соответствующие методы установки и получения.

Форма HTML

<html:text property="name" size="10" maxlength="10">

Соответствующий компонент.

public class AddressForm 
{
  private String name=null;

  public void setName(String name){
    this.name=name;
  }

  public String getName(){
    return this.name;
  }
}
...