オブジェクトのリストのチェックボックスのリストを作成しようとしています。私のフォームバッキングBeanには、2つのリストがあります。私のすべての組織を含む参照データを含む1つのリスト。選択した組織を含む別のリスト。
ページは正常に読み込まれますが、送信しようとすると、次の例外が発生します。
Caused by: javax.servlet.ServletException: javax.servlet.jsp.JspTagException: No message found under code 'typeMismatch on selectedOrganizations' for locale 'nl'.
at org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:852)
at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:781)
at org.apache.jsp.WEB_002dINF.views.flows.validation_jsp._jspService(validation_jsp.java:177)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:369)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:322)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:249)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:638)
at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:543)
at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:480)
at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:968)
at org.apache.jsp.tag.web.wizard_tag._jspx_meth_form_005fform_005f0(wizard_tag.java:198)
at org.apache.jsp.tag.web.wizard_tag.doTag(wizard_tag.java:146)
at org.apache.jsp.WEB_002dINF.views.management.roleinvitation.create.selectOrganizations_jsp._jspx_meth_iam_005fwizard_005f0(selectOrganizations_jsp.java:375)
at org.apache.jsp.WEB_002dINF.views.management.roleinvitation.create.selectOrganizations_jsp._jspService(selectOrganizations_jsp.java:141)
... 126 more
ここで私のコードスニペットを見つけてください:
JSP
<c:forEach items="${organizations}" var="${organization}">
<form:checkbox cssClass="organizationCheckbox" path="selectedOrganizations" value="${organization}"/>
</c:forEach>
モデルを表示
public class CreateRoleInvitationViewModel implements Serializable {
private List<OrganizationViewModel> selectedOrganizations;
private List<OrganizationViewModel> organizations;
...
}
コンバータ
public class StringToOrganizationViewModel extends StringToObject {
public StringToOrganizationViewModel() {
super(OrganizationViewModel.class);
}
@Override
protected Object toObject(String code, Class targetClass) throws Exception {
OrganizationViewModel orgViewModel = new OrganizationViewModel();
orgViewModel.setCode(code);
return orgViewModel;
}
@Override
protected String toString(Object object) throws Exception {
return ((OrganizationViewModel)object).getCode();
}
}
コンバーターが使用されているかどうかを確認しました。ページが読み込まれるときにtoString(Object object)メソッドを渡します。送信しようとすると、toObject(String code、Object objectClass)が渡されません。これは、その前に例外が発生するためです。
注:チェックボックスを1つだけ選択すると、すべてが正常に機能します。バッキングBeanに、1つのエントリを持つselectedOrganisationsリストが含まれていることがわかります。複数のチェックボックスを選択すると、クラッシュします。