views:

59

answers:

1

I am using Spring MVC for a web application and I am working with a simple form that deals with selecting clients and showing contact information.

One of the problems I am having is that If I select a client the first time, it will pull the information up, but the second time it wont. It will show the information from the previous client.

I looked more into what I was logging and I noticed that I was getting a data binding error and was seeing the all too familiar output on my console as the following.

Failed to convert property value of type [java.lang.String[]] to required type
 [java.lang.Integer] for property 'clientId'; nested exception is
 java.lang.NumberFormatException: For input string: "3349,4182"

If you see in the error output it shows

...for string: "3349,4182"

For reference the 3349 is the client-ID of the first customer selected, when the form is posted the 4182 is the client-ID of the second.

I have done some research and have come across people who have said that it doing something with treating the two numbers as an array of [3349,4182] as oppose to just taking the new ClientID.

Thanks,



Edit The backing object is as follows

public class ClientContactModel implements Serializable {
    private String searchText;
    private Integer clientId;
public ClientContactModel() {
    }
    public String getSearchText() {
        return searchText;
    }
    public void setSearchText(String searchText) {
        this.searchText = searchText;
    }
    public Integer getClientId() {
        return clientId;
    }
    public void setClientId(Integer clientId) {
        this.clientId = clientId;
    }
}

The call that is throwing the NumberFormatException is

 clientId = Integer.valueOf(request.getParameter("clientId"));


To answer your first question, yes, I am using a SimpleformController

Here is the UI Code pertaining to the client,

<pre><code><tr>
  <td align="center">
    <form:select path="clientId">
      <form:option value="">Select a client...</form:option>
      <form:options items="${clientUsers}" itemValue="id" itemLabel="username" />
    </form:select>
    <input type="button" name="selectButton" id="selectButton" value="Go" onclick="selectContact();">
  </td>
</tr>
<tr>
  <td align="center">
    Display clients who have not updated their contact information since
    <input name="month" type="text" id="textfield2" value="MM" size="4">
    <input name="day" type="text" id="textfield3" value="DD" size="4">
    <input name="year" type="text" id="textfield4" value="YY" size="4">
    <input type="submit" name="notUpdatedButton" id="notUpdatedButton" value="Go">
  </td>
</tr>

There is a little JS with it too

function selectContact() {
    document.getElementById("searchText").value = "";
    document.getElementById("clientContactObj").submit();
  }
+2  A: 

Can you select multiple clients in the list?

If yes, you need to manage multiple ID's in the server (comma separated list).

If no, use multiple=false in the select to prevent multiple entries from being selected.

MatthieuF