Any ideas guys?

Aled Rhys Jones wrote:
Hi all

I'm trying to get my head around the may to many pickList. I've got a many to many relationship between a website model and a website type model. The pick list used in the user form seems suitbable, but when I try to use it I get Null Pointer (jasper) exceptions.
Questions:
Where do availableRoles in userform.jsp get populated? UserFormController doesn't seem to be doing this. Do I need a bind a customeditor to get from strings to ids? What should I bind to?

Thanks in advance for any help.

Cheers
Aled

p.s. my jsp snippet:
<c:choose>
          <c:when test="${not empty website.id}">
              <li>
                  <fieldset class="pickList">
<legend><fmt:message key="websiteForm.assignWebsiteTypes"/></legend>
                   <table class="pickList">
                       <tr>
                           <th class="pickLabel">
<appfuse:label key="websiteForm.availableWebsiteTypes" colon="false" styleClass="required"/>
                           </th>
                           <td></td>
                           <th class="pickLabel">
<appfuse:label key="websiteForm.currentWebsiteTypes" colon="false" styleClass="required"/>
                           </th>
                       </tr>
<c:set var="leftList" value="${availableWebsiteTypes}" scope="request"/> <c:set var="rightList" value="${website.websiteTypes}" scope="request"/>
                       <c:import url="/WEB-INF/pages/pickList.jsp">
                           <c:param name="listCount" value="1"/>
<c:param name="leftId" value="availableWebsiteTypes"/>
                           <c:param name="rightId" value="websiteTypes"/>
                       </c:import>
                   </table>
               </fieldset>
           </li>
           <li>
<strong><appfuse:label key="websiteForm.currentWebsiteTypes"/>:</strong> <c:forEach var="websiteType" items="${website.websiteTypes}" varStatus="status"> <c:out value="${websiteType.label}"/><c:if test="${!status.last}">,</c:if> <input type="hidden" name="websiteTypes" value="<c:out value="${websiteType.label}"/>"/>
               </c:forEach>
           </li>
       </c:when>
       <c:otherwise>
           <li>
               <p><fmt:message key="websiteForm.saveWebsiteTypes"/></p>
           </li>
       </c:otherwise>

My fromcontroller (so far):
private WebsiteManager websiteManager = null;
   private CountryManager countryManager = null;
   private UserManager userManager = null;
   private WebsiteTypeManager websiteTypeManager = null;
public void setWebsiteManager(WebsiteManager websiteManager) { this.websiteManager = websiteManager; } public void setCountryManager(CountryManager countryManager) { this.countryManager = countryManager; }
     public void setUserManager(UserManager userManager){
       this.userManager = userManager;
   }
public void setWebsiteTypeManager(WebsiteTypeManager websiteTypeManager){
       this.websiteTypeManager = websiteTypeManager;
   }

public WebsiteFormController() { setCommandClass(Website.class); setCommandName("website"); } protected Object formBackingObject(HttpServletRequest request) throws Exception { String id = request.getParameter("id"); Website website;
       if (!StringUtils.isBlank(id)) {
           website = websiteManager.get(new Long(id));         }
       else{
           website = new Website();
           Url url = new Url();
           website.setUrl(url);
           Contact contact = new Contact();
           website.setContact(contact);
       }
       return website;
} public ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors) throws Exception { log.debug("entering 'onSubmit' method..."); Website website = (Website) command; boolean isNew = (website.getId() == null); String success = getSuccessView(); Locale locale = request.getLocale(); if (request.getParameter("delete") != null) { websiteManager.remove(website.getId()); saveMessage(request, getText("websiteForm.deleted", locale)); } else { String key = (isNew) ? "websiteForm.added" : "websiteForm.updated"; User requestUser = userManager.getUserByUsername(request.getRemoteUser());
           if(request.getParameter("disapprove") != null){
               website.setIsChecked(false);
               website.setCheckedUser(null);
           }
           else if(request.getParameter("approve") != null){
               website.setIsChecked(true);
               website.setCheckedUser(requestUser);
           }
           if (!isNew) {
success = "redirect:websiteform.html?id=" + website.getId(); String[] selectedWebsiteTypes = request.getParameterValues("websiteTypes");

               if (selectedWebsiteTypes != null) {
List<WebsiteType> websiteTypes = new ArrayList<WebsiteType>();
                   for (String websiteType : selectedWebsiteTypes) {
websiteTypes.addAll(websiteTypeManager.findByType(websiteType));
                   }
                   website.setWebsiteTypes(websiteTypes);
               }

           }            else{
               website.setSubmittedUser(requestUser);
           }
websiteManager.save(website); saveMessage(request, getText(key, locale)); } return new ModelAndView(success); } protected Map referenceData(HttpServletRequest request) throws Exception {
       Map<String, Object> retval = new HashMap<String, Object>();
       retval.put("countries", countryManager.getAll());
       retval.put("availableWebsiteTypes", websiteTypeManager.getAll());
       return retval;
   }
     @Override
protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) { binder.registerCustomEditor(Country.class, "contact.country", new CountryEditor(countryManager)); binder.registerCustomEditor(Set.class, "websiteTypes", new CustomCollectionEditor(Set.class) {
            protected Object convertElement(Object element) {
                if (element != null) {
                    Long id = new Long((String)element);
                    WebsiteType websiteType = websiteTypeManager.get(id);
                    return websiteType;
                }
                return null;
            }
       });
   }

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]





---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to