Lukasz,

I think what you need here is to crear a property editor for your Type
class.
you will then use "type" as your path instead of "type.id" since what you
are actually setting is a type.

your property editor will now how to set a type based on its id.
you might want to check out this link for further information on property
editos with spring mvc
http://static.springframework.org/spring/docs/2.5.x/reference/validation.html

hope this helps

Alejandro

On Dec 15, 2007 3:21 PM, Łukasz Bachman <[EMAIL PROTECTED]> wrote:

> Dear AppFuse users,
>
> well, I figured out that the best way is to use Spring's <form:select
> ...> tag, but I have following error when I try to display my form:
>
> ... ERROR [btpool0-1] SelectTag.doStartTag(84) | Invalid property
> 'type' of bean class [...Comment]: Value of nested property 'type' is
> null
>
> org.springframework.beans.NullValueInNestedPathException: Invalid
> property 'type' of bean class [...Comment]: Value of nested property
> 'type' is null
>
> This is my JSP page:
>
> <li>
>        <appfuse:label styleClass="desc" key="label.type"/>
>        <form:errors path="type" cssClass="fieldError"/>
>        <form:select path="type.id">
>                <form:options items="${CommentTypesList}" itemValue="id"
> itemLabel="value"/>
>        </form:select>
> </li>
>
> I've managed to figure out, that error lies in "path" attribute of
> <form:select> element. I think that "type.id" is proper value, because
> that is what I want to set up in Controller, right? But when I've
> changed it to "type" (like in example from Spring reference) the page
> was displayed properly, but I got binding errors after form
> submission.
>
> What am I doing wrong?
>
> Best regards,
> Łukasz Bachman
>
> ---------- Forwarded message ----------
> From: Łukasz Bachman <[EMAIL PROTECTED]>
> Date: 14-12-2007 17:23
> Subject: Custom binding of SELECT element
> To: [email protected]
>
>
> Dear AppFuse users,
>
> I was wondering which is the most elegant way of handling HTML's
> "SELECT - OPTION" elements? Normally, I was fetching all the form
> fields using "request.getParameter()" method, but I find it very
> inelegant and it does not help in maintaining code. So, I'm very
> curious how are You guys doing it? Let's sketch an example:
>
> Model classes (I got rid of the Hibernate annotations):
>
> public class Comment extends BaseObject {
>        ....
>        private Type typeOfComment;
>        ....
> }
>
> public class Type extends BaseObject {
>
>        private Long id;
>        private String tag;                    // 'Type' entity will
> hold types for different elements
>        private String value;                 //  The name of the type
>        ....
> }
>
>
> JSP:
> ( CommentTypesList is of course the list of Types elements)
>
> <select name="type">
>   <c:forEach var="type" items="${CommentTypesList}">
>        <option value="<c:out value="${type.id}"/>"><c:out
> value="${type.value}"/></option>
>   </c:forEach>
> </select>
>
> And now, the controller:
> 1) I have overrided "showForm(...)" method which gets
> "CommentTypesList" and sends it to the view.
> 2) If I leave everything as it is in Tutorial's example, I'll get
> parsing error because I'm passing types ID.
>
>
> So I have following questions:
>
> Q1) Which is the best way to avoid that?
> Q2) Is there any way to create custom binding rules in pretty elegant
> manner?
> Q3) Do You know of any tags that support displaying "SELECT - OPTION"
> elements using custom classes (such as "Type" in my particular
> example)?
>
> Best regards,
> Łukasz Bachman
>
> P.S. Hope this post is not too long or has inappropriate form. If
> that's true - let me know.
> P.P.S. I'm using Appfuse 2.0.x, Hibernate + Spring MVC framework

Reply via email to