Martin, 

First of all, thanks for the reply.  The full action is listed below:

I guess what is not clear to me is whether I need to create a
StrutsTypeConverter to convert the selected item from the list back to a
model. 

As I have been thrashing about trying to get this to work, I have tried
creating a converter to convert the id passed back to an object...

public class StatusConverter extends StrutsTypeConverter {

   private static final Log _log =
LogFactory.getLog(StatusConverter.class);

        @Override
        public Object convertFromString(Map context, String[] values,
Class toClass) {

        if (values.length > 0 && values[0] != null &&
values[0].trim().length() > 0) {
                Status status= new Status();
                status.setId(new Integer(values[0]));
                return status;
        }
        return null;
        }

        @Override
        public String convertToString(Map context, Object status) {
        if (status instanceof Status) {
            return ((Status)status).getId().toString();
        }
                return "";
        }

}

This seems to work, but only the ID is passed to the converter, which
means I have to look up the reference to the Status object in the
database. This just feels as if I am going down the wrong path.  Again,
below is my action. Thanks for any suggestions you might have.

Best Regards,

MG

...

public class CallAction extends BaseCallAction implements
                ServletRequestAware, ModelDriven<Call>, Preparable {

        /**
         * 
         */
        private static final long serialVersionUID =
9001475066131203883L;
        private Call Call;
        private HttpServletRequest request;
        CallService CallService;
        UserService userService;
        StatusService statusService;
        
        Integer id;

        public Integer getId() {
                return id;
        }

        public void setId(Integer id) {
                this.id = id;
        }
        
        public String getView() throws Exception{ 
                return SUCCESS;
        }

        public String list() throws Exception {
                
                List<Call> results= CallService.getCalls();
                request.setAttribute(SEARCH_RESULTS, results);
                return SUCCESS;
        }

        public String execute() throws Exception {
                return SUCCESS;
        }

        public Call getModel() {
                return Call;
        }

        public void prepare() throws Exception {
                if(id == null || id.intValue() == 0){
                        PermissionedUser permissionedUser=
this.getAuthenticatedUser();
                        Call= new Call();
                        Call.setRequestor(permissionedUser.getUser());
                }else{
                        Call= CallService.getCall(id);
                }
                request.getSession().setAttribute("Call", Call);
        }
        
        public String update() throws Exception{
                CallService.update(Call);
                return SUCCESS;
        }

        public void setServletRequest(HttpServletRequest request) {
                this.request= request;
        }

        public void setCallService(CallService CallService) {
                this.CallService = CallService;
        }
        
        public void setUserService(UserService userService) {
                this.userService = userService;
        }
        
        public void setStatusService(StatusService statusService){
                this.statusService= statusService;
        }
        
        public List<Status> getStatusList(){
                return statusService.findAll();
        }
 
}



-----Original Message-----
From: Martin Gainty [mailto:[EMAIL PROTECTED] 
Sent: Friday, April 18, 2008 12:22 PM
To: Griffith, Michael *
Cc: Struts Users Mailing List
Subject: Re: Clarification on Type Conversion?

Good Afternoon Mike-

Tough to diagnose without seeing the service interface defined in your
action
e.g.
public class HHSAction implements Preparable {
    private HHSService service;
}

package quickstart.service;
import java.util.List;
import quickstart.model.Person;
public interface HHSService
{
    public List<Person> findAll();
    public void save(Person person);
    public Person find(int id);
}

?
Martin-
----- Original Message -----
From: "Griffith, Michael *" <[EMAIL PROTECTED]>
To: "Struts Users Mailing List" <user@struts.apache.org>
Sent: Friday, April 18, 2008 10:33 AM
Subject: Clarification on Type Conversion?


Hello All,



I am having a problem with Struts 2 form submission, because I believe a
related <s:select> field is not being converted correctly.  I have read
the documentation at: http://struts.apache.org/2.x/docs/select.html and
http://struts.apache.org/2.0.11.1/docs/type-conversion.html  It is my
understanding that I should not need to provide any custom converter,
that this conversion should be automatic.  When I submit the form, I
receive the error: Invalid field value for field "status".



Here is the setup:



I have a form with a <s:select> field:

            <s:select key="form.status" name="status"

                               list="statusList"

                               listKey="id"

                               listValue="description"/>



The action has the method:



            public List<Status> getStatusList(){

                        return statusService.findAll();

            }



The model object that status is mapped to looks like this:



@Entity

@Table(name="STATUS")

@Validation

public class Status implements Identifiable, Serializable {



            private static final long serialVersionUID =
-8017026685032314796L;

            private Integer id;

            private String description;



            @Id

            @GeneratedValue(strategy = GenerationType.AUTO)

            @Column(name = "ID", unique = true, nullable= false)

            public Integer getId() {

                        return id;

            }



            public void setId(Integer id){

                        this.id= id;

            }



            @Column(name="DESCRIPTION", nullable= false)

            public String getDescription() {

                        return description;

            }



            @RequiredStringValidator(message="Validation Error",
key="validate.notEmpty", trim=true)

            public void setDescription(String description) {

                        this.description = description;

            }



I tried creating a mapping properties file called
actionName-conversion.properties:

KeyProperty_StatusList=id

Element_StatusList=Status

CreateIfNull_statusList=true



No avail.  I'm sure my problem is obvious, but I can't see it. Any help
or suggestions would be much appreciated...



Thanks in advance!

Michael Griffith







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

Reply via email to