在我的 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 方法。
我在 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 方法。