在我的 jsp 和 struts-bean.tld 中使用数组列表的属性

using an attribute of an arraylist in my jsp with struts-bean.tld

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

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

Arraylist中Account对象的class声明:

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: No getter method for property accounts.get(0).bic of bean BankAccountsActionForm

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

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

试试像这样的东西:

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

因为它是 ArrayList 而不是 Array。

确保您有 getter setter 用于活动中的帐户 class ** BankAccountsActionForm **

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 ; } 

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

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

   public String getBic() {
    return bic;
}

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

如果您在 Struts 1.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 class 具有属性 bic 的 getter/setter 方法。