The "availableRoles" List is populated in StartupListener.java:

    /**
     * This method uses the LookupManager to lookup available roles
from the data layer.
     * @param context The servlet context
     */
    public static void setupContext(ServletContext context) {
        ApplicationContext ctx =
WebApplicationContextUtils.getRequiredWebApplicationContext(context);
        LookupManager mgr = (LookupManager) ctx.getBean("lookupManager");

        // get list of possible roles
        context.setAttribute(Constants.AVAILABLE_ROLES, mgr.getAllRoles());
        log.debug("Drop-down initialization complete [OK]");
    }

You should be able to put a list of objects in any scope in your
controller to do the same thing. The referenceData() method is a
recommended location.

Matt

On 8/20/07, Aled Rhys Jones <[EMAIL PROTECTED]> wrote:
> 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]
>
>


-- 
http://raibledesigns.com

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

Reply via email to