ユーザーにオプションのリストを提示する必要がある JSP 生成フォームがあります。これらのいくつかは、単一インスタンスのオプション (目次を生成するかどうかなど) であり、正常に機能しています。ここで、従属オプションのリストを追加し、ユーザーが各オプションをオンまたはオフにできるようにする必要があります。JSP ページでオプションのリストを生成し、それぞれに固有の ID を与えることができます。<form:checkbox/>
フォームに要素があるものを表現したいと考えています。
オプション クラスは次のようになります。
// Option class
public class PdfCatalogOptions
{
private boolean isTableOfContentsIncluded;
private List<ProductGroup> productGroups;
public boolean getTableOfContentsIncluded () {
return isTableOfContentsIncluded;
}
public PdfCatalogOptions setTableOfContentsIncluded ( final boolean isTableOfContentsIncluded ) {
this.isTableOfContentsIncluded = isTableOfContentsIncluded;
return this;
}
public List<ProductGroup> getProductGroups() {
return productGroups;
}
public PdfCatalogOptions setProductGroups( final List<ProductGroup> setProductGroups ) {
this.productGroups = productGroups;
return this;
}
}
製品グループ クラスは次のようになります。
public class ProductGroup
{
private String groupName;
private boolean isSelected;
public String getGroupName () {
return groupName;
}
public ProductGroup setGroupName ( final String groupName ) {
this.groupName = groupName;
return this;
}
public Boolean getIsSelected () {
return isSelected;
}
public ProductGroup setIsSelected ( final boolean selected ) {
isSelected = selected;
return this;
}
}
get
コントローラー内のハンドラーで、次のようにします。
@RequestMapping( method = RequestMethod.GET )
public String get ( final Model model ) throws Exception {
model.addAttribute ( "options", new PdfCatalogOptions ().setProductGroups ( buildProductGroupList () ) );
return FormName.GENERATE_CATALOG;
}
内部のロジックは重要ではなく、必要なデータが取り込まれたオブジェクトの をbuildProductGroupList
生成するだけです。ArrayList
ProductGroup
私が抱えている問題は、オブジェクト内の個々のProductGroup
オブジェクト内のフィールドにバインドするように Spring を説得できないように見えることですPdfCatalogOptions
。
JSP は次のようになります。
<form:form action="generateCatalog.do" commandName="options">
<table>
<tr>
<td colspan="3"><form:errors cssClass="error"/></td>
</tr>
<tr>
<td><spring:message code="catalog.include.toc"/></td>
<td><form:checkbox path="tableOfContentsIncluded"/></td>
</tr>
<tr>
<td> </td>
</tr>
<c:forEach items="options.productGroups" var="productGroup">
<tr>
<td> </td>
<td><form:checkbox path="productGroup.isSelected"/>blah</td>
</tr>
</c:forEach>
</table>
</form:form>
内側の<c:forEach...>
ループでは、Spring を個々のオブジェクトにバインドするための適切な呪文を見つけることができないため、ユーザーの要求に応じてプロパティが設定されたオブジェクトProductGroup
のリストを取得できます。ProductGroup
isSelected
提示されているように、次のように不平を言っています。
org.springframework.beans.NotReadablePropertyException: Invalid property 'productGroup' of bean class [<redacted>.PdfCatalogOptions]: Bean property 'productGroup' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter?
ここで誰かが私を正しい方向に向けることができますか?
編集 1 : これは、すべての製品グループを正しく一覧表示します。
<c:forEach items="${options.productGroups}" var="pg">
<tr>
<td>${pg.groupName}</td>
</tr>
</c:forEach>
値はそこにあり、期待どおりに表示されます。ただし、値のパスをチェックボックスにバインドする方法を見つけることはできません。追加すると、それは のプロパティではない<form:checkbox path="pg.isSelected"/>
と言われます。pg
PdfCatalogOptions
追加する<form:checkbox path="${pg.isSelected}"/>
と、やや予想通り、それtrue
は のプロパティではないと言われますPdfCatalogOptions
。