JSP с сервлетом - компонент не может преобразовать значение даты из поля ввода - PullRequest
2 голосов
/ 02 октября 2011

После долгих исследований мне не удалось найти разрешение.

У меня есть страница JSP, подкрепленная сервлетом, который я настраиваю для запуска на Google App Engine.Я создал bean-компонент (клиент), чтобы облегчить передачу полей формы между JSP и сервлетом.В большинстве случаев это работало нормально.

Как часть моего сервлета, я проверяю введенные пользователем значения формы.В случае ошибки проверки я использую RequestDispatcher, чтобы переслать запрос обратно на страницу JSP, чтобы можно было отобразить сообщение об ошибке.Когда это происходит, я получаю следующую ошибку:

org.apache.jasper.JasperException: org.apache.jasper.JasperException: невозможно преобразовать строку "02-10-2011" в класс "java.util.Date "для атрибута" assignDate ": редактор свойств не зарегистрирован в PropertyEditorManager

Вот сегменты моего кода, которые могут представлять интерес:

public class Client {
    public Client() {}
    private long clientId;
    private String name;
    private String address;
    private String homePhone;
    private String cellPhone;
    private String workPhone;
    private String fax;
    private String city;
    private String postalCode;
    private String emailAddress;
    private String directions;
    private String style;
    private String decoratingThemes;
    private String comments;
    private String referralSource;
    private boolean emailList;
    private Date appointmentDate;
    public long getClientId() {
        return clientId;
    }
    public void setClientId(long clientId) {
        this.clientId = clientId;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    public String getHomePhone() {
        return homePhone;
    }
    public void setHomePhone(String homePhone) {
        this.homePhone = homePhone;
    }
    public String getCellPhone() {
        return cellPhone;
    }
    public void setCellPhone(String cellPhone) {
        this.cellPhone = cellPhone;
    }
    public String getWorkPhone() {
        return workPhone;
    }
    public void setWorkPhone(String workPhone) {
        this.workPhone = workPhone;
    }
    public String getFax() {
        return fax;
    }
    public void setFax(String fax) {
        this.fax = fax;
    }
    public String getCity() {
        return city;
    }
    public void setCity(String city) {
        this.city = city;
    }
    public String getPostalCode() {
        return postalCode;
    }
    public void setPostalCode(String postalCode) {
        this.postalCode = postalCode;
    }
    public String getEmailAddress() {
        return emailAddress;
    }
    public void setEmailAddress(String emailAddress) {
        this.emailAddress = emailAddress;
    }
    public String getDirections() {
        return directions;
    }
    public void setDirections(String directions) {
        this.directions = directions;
    }
    public String getStyle() {
        return style;
    }
    public void setStyle(String style) {
        this.style = style;
    }
    public String getDecoratingThemes() {
        return decoratingThemes;
    }
    public void setDecoratingThemes(String decoratingThemes) {
        this.decoratingThemes = decoratingThemes;
    }
    public String getComments() {
        return comments;
    }
    public void setComments(String comments) {
        this.comments = comments;
    }
    public String getReferralSource() {
        return referralSource;
    }
    public void setReferralSource(String referralSource) {
        this.referralSource = referralSource;
    }
    public boolean isEmailList() {
        return emailList;
    }
    public void setEmailList(boolean emailList) {
        this.emailList = emailList;
    }
    public Date getAppointmentDate() {
        return appointmentDate;
    }
    public void setAppointmentDate(Date appointmentDate) {
        this.appointmentDate = appointmentDate;
    }
}

объявление bean-компонента на странице:

<jsp:useBean id="Client" class="com.HC.RaveDesigns.Entity.Client" scope="session"/>

Метод переадресации запроса.

private void dispatchError(String error, HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
{
    req.setAttribute("error",error);

    RequestDispatcher rd = req.getRequestDispatcher("ManageClient.jsp");
    rd.forward(req,resp);
}

Ответы [ 2 ]

2 голосов
/ 02 октября 2011

Это потому, что пользователь отправляет вам строку, а не дату, и это ваша работа, чтобы преобразовать этот текст в дату.

Самое быстрое исправление будет:

  • изменить тип параметра в типе установки на String
  • конвертировать строку в Date внутри этого установщика.

Пример:

public void setAppointmentDate(String appointmentDate) {
    DateFormat df = new SimpleDateFormat("dd-MM-yyyy"); 
    this.appointmentDate = df.parse(appointmentDate);  
}

Кроме того, вы должны изменить геттер таким же образом или использовать fmt: formatDate, как предложил @duffymo. Также не забудьте обработать исключение разбора даты - Никогда не доверяйте вводу пользователя

0 голосов
/ 02 октября 2011

Используйте JSTL <fmt:formatDate> в своих JSP. Вы должны использовать JSTL.

Вам нужно использовать DateFormat для разбора этой строки в java.util.Date:

DateFormat formatter = new SimpleDateFormat("MM-dd-yyyy");
formatter.setLenient(false);
Date d = formatter.parse("02-10-2011");
...