Hi all. I've created a portlet in my project using portlet MVC. In this portlet, I have implemented a Command object:
To abbreviate, I've dropped getters and setters on this post, but them exist in my code. This is my controller:Code:public class ApplicationProjectVO implements Serializable { private Application application; private List<Project> projects; }
As you can see, I've sent 2 model Objects: a List<Application> and a List<Project>, and a command object: ApplicationProjectVO.Code:@Controller("applicationProjectManagerController") @RequestMapping("VIEW") public class ApplicationProjectManagerController { private static final Logger logger = Logger .getLogger(ApplicationProjectManagerController.class); @Autowired @Qualifier("applicationService") private ApplicationService applicationService; @Autowired @Qualifier("projectService") private ProjectService projectService; public void setApplicationService(ApplicationService applicationService) { this.applicationService = applicationService; } public void setProjectService(ProjectService projectService) { this.projectService = projectService; } @RenderMapping(params = "myaction=viewApplicationProjectForm") public String doView() { return "viewApplicationProjectForm"; } @ModelAttribute(value = "applicationList") public List<Application> getApplications() { return applicationService.getApplications(); } @ModelAttribute(value = "projectList") public List<Project> getProjects() { return projectService.getProjects(); } @ModelAttribute("appProj") public ApplicationProjectVO getCommandObject() { return new ApplicationProjectVO(); } @ActionMapping(params = "myaction=addApplicationProject") public void addApplicationProject( @ModelAttribute ApplicationProjectVO application, BindingResult bindingResult, ActionResponse response, SessionStatus sessionStatus) { try { if (!bindingResult.hasErrors()) { logger.info("Application = " + application.getApplication().getApplicationName()); response.setRenderParameter("myaction", "viewApplicationProjectForm"); sessionStatus.setComplete(); } else { logger.info("A binding error happened"); List<ObjectError> errorList = bindingResult.getAllErrors(); Iterator<ObjectError> it = errorList.iterator(); while (it.hasNext()) { logger.info("ObjectError: " + it.next().getDefaultMessage()); } response.setRenderParameter("myaction","viewApplicationProjectForm"); } } catch (Exception e) { logger.error("ERROR: addApplicationProject method", e); } } }
What I'm trying to do is showing in a table the Application list and in another table the Project list. The last column of Application list is a radio button to choose one project and bind it to ApplicationProjectVO.application:
When I press Submit I get this message:Code:<portlet:actionURL var="showAddApplicationProjectActionUrl"> <portlet:param name="myaction" value="addApplicationProject" /> </portlet:actionURL> <form:form name="appProjCatalogForm" commandName="appProj" method="post" action="${showAddApplicationProjectActionUrl}"> <div> <p> <table border="1" cellspacing="2" cellpadding="4"> <tr bgcolor="#99CCFF"> <td valign="top"><b>Id</b></td> <td valign="top"><b>Name</b></td> <td valign="top"><b>Version</b></td> <td valign="top"><b>Path SVN</b></td> <td valign="top"><b>Status</b></td> <td valign="top"><b>Note</b></td> <td></td> </tr> <c:if test="${not empty applicationList}"> <c:forEach var="app" items="${applicationList}"> <tr> <td valign="top"><c:out value="${app.idapplication}" /></td> <td valign="top"><c:out value="${app.applicationName}" /></td> <td valign="top"><c:out value="${app.applicationVersion}" /></td> <td valign="top"><c:out value="${app.applicationPathsvn}" /></td> <td valign="top"><c:out value="${app.applicationStatus}" /></td> <td valign="top"><c:out value="${app.applicationNotes}" /></td> <td><form:radiobutton path="application" value="${app}" /></td> </tr> </c:forEach> <tr> <td colspan="6"></td> <td><input type="submit" value="Add ApplicationProject" /></td> </tr> </c:if> </table> </p> </div> </form:form>
I don't understand.Take a look to my radio button code:Failed to convert property value of type 'java.lang.String' to required type 'com.oami.qaportal.domain.Application' for property 'application'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [com.oami.qaportal.domain.Application] for property 'application': no matching editors or conversion strategy found
Where application is a field of type Application in my command object (ApplicationProjectVO) and ${app} is the iterating variable over the list of applications.Code:<form:radiobutton path="application" value="${app}" />
What I'm doiing wrong?


Reply With Quote
