1

ユーザーにオプションのリストを提示する必要がある 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生成するだけです。ArrayListProductGroup

私が抱えている問題は、オブジェクト内の個々の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>&nbsp;</td>
        </tr>
        <c:forEach items="options.productGroups" var="productGroup">
            <tr>
                <td>&nbsp;</td>
                <td><form:checkbox path="productGroup.isSelected"/>blah</td>
            </tr>
        </c:forEach>
    </table>
</form:form>

内側の<c:forEach...>ループでは、Spring を個々のオブジェクトにバインドするための適切な呪文を見つけることができないため、ユーザーの要求に応じてプロパティが設定されたオブジェクトProductGroupのリストを取得できます。ProductGroupisSelected

提示されているように、次のように不平を言っています。

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"/>と言われます。pgPdfCatalogOptions

追加する<form:checkbox path="${pg.isSelected}"/>と、やや予想通り、それtrueは のプロパティではないと言われますPdfCatalogOptions

4

0 に答える 0