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]