我在 jsp 中使用数组列表的属性时遇到问题。 我的 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: No getter method for property accounts.get(0).bic of bean BankAccountsActionForm
您有解决方案或其他方法吗?
我有一个糟糕的替代方案,直接在表单中使用属性 accountbic1 。但它会导致后面大量的工作来重新影响真正的ArrayList
的所有临时属性。
最佳答案
如果您在 Struts 1.x 中有一个项目集合,则使用 <logic:iterate>
标签。
添加 struts-logic.tld
taglig 位于 JSP 之上,如下所示:
<%@ 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>
如果您想迭代集合并访问特定索引,请使用 indexId
上<logic:iterate>
像这样:
<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 方法.
关于java - 在我的 jsp 中使用 arraylist 的属性与 struts-bean.tld,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29557659/