在带有struts-bean.tld的jsp中使用arraylist的属性



我在jsp中使用arraylist的属性时遇到问题。我的ActionForm中的数组列表:

private ArrayList<Account> accounts = new ArrayList<Account>();

Arraylist:中Account对象的类声明

public class Account implements Serializable, Cloneable {
    private String bic;
    public String getBic() {
        return bic;
    }
    public void setBic(final String newBic) {
        bic = newBic;
    }
}

我的jsp中的调用:

<bean:write name="BankAccountsActionForm"
                            property="accounts.get(0).bic" />

控制台错误:

javax.servlet.jsp.JspException:没有用于属性帐户的getter方法。get(0).bic of bean BankAccountsActionForm

你有解决方案或其他方法吗?

我有一个糟糕的选择,直接在表单中使用属性accountbic1。但它会导致大量工作,从而重新影响实际ArrayList的所有临时属性。

如果Struts1.x中有一个项目集合,那么使用<logic:iterate>标记。

在JSP顶部添加struts-logic.tld标签,如下所示:

<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%>

然后,使用<logic:present><logic:iterate>,您可以如下迭代ArrayList

<logic:present name="accounts">
    <logic:iterate id="account" name="accounts">
        <bean:write name="account.bic" />
    </logic:iterate>
</logic:present>

如果要迭代集合并访问特定索引,请在<logic:iterate>上使用indexId,如下所示:

<logic:present name="accounts">
    <logic:iterate id="account" name="accounts" indexId="index">
        <logic:equal name="index" value="0">
            <bean:write name="account.bic" />
        </logic:equal>
    </logic:iterate>
</logic:present>

使用JSTL:也可以做到这一点

<logic:present name="accounts">
    <logic:iterate id="account" name="accounts" indexId="index">
        <c:if test="${index == 0}">
            <bean:write name="account.bic" />
        </c:if>
    </logic:iterate>
</logic:present>

确保Account类具有属性bic的getter/setter方法。

这只是getter和setter方法的错误。根据POJO标准重新编码您的getter和setter,如下所示:

从setter方法中删除final,并根据POJO标准更改setter和getter方法名称,如下所示:

   public String getBic() {
    return bic;
}
public void setBic(String bic) {
    this.bic = bic;
}

尝试一些类似的东西:

<bean:write name="BankAccountsActionForm" property="accounts.get(1).bic" />

因为它是ArrayList而不是Array。

确保您在操作类**BankAccountsActionForm**中有帐户的getter setter

public List getAccounts ();
public void setAccounts(List acc);

根据POJO标准更改setter和getter方法名称,如下所示:

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

它将工作良好

从setter方法中删除final,然后重试并按以下写入

 public void setBic(String bic )
     { this.bic = bic ; } 

最新更新