0

我的表单中有一个对象,其中包含各种字符串属性。

当我想在我的 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 输入字段吗?

我的 bean 有必要的相应 getter 和 setter。

4

3 回答 3

2

正确的翻译方法:

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

对 Struts 来说,

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

这意味着有一个带有名称的请求,UFForm其中包含一个包含方法的bean getCompany()(我假设它返回一个Company对象),而它又具有一个getAddress()getter(如果你明白我的意思的话)。简而言之,来自 request/session 的 bean UFForm,TagLib 正在访问getCompany().getAddress()

PS希望getAddress()不返回null else<html:text />会抛出异常。


编辑解释我上面做了什么:

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();
于 2010-09-16T20:40:17.557 回答
0

你的 bean 应该有相应的 setter 和 getter 方法。

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;
  }
}
于 2010-09-16T08:01:02.983 回答
0

当您通过以下方式获取文本框的值时:

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

您实际上是在对 Struts 说:

formObject.getCompany().getAddress();

所以你必须有一个公司的getter(它不能返回null,否则下一个操作将失败)和一个公司对象上的地址的setter。setter/getter 必须是公开的。这一定已经是这种情况,因为您可以毫无错误地执行以下操作:

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

现在,让我烦恼的是这部分:${UFForm.. 当您使用 JSTL 时,您正在显式访问表单。通过 ,<html:text>您可以隐式访问表单上的属性。这种隐式形式由封闭<html:form>标签提供。你有<html:text>里面的<html:form>吗?

表单 bean 是根据关联的表单 bean 规范定位/创建/公开的,ActionMapping因此还要检查您的映射。

于 2010-09-16T20:06:22.707 回答