log N
log N

Reputation: 945

Errors in my springs MVC

I have written a simple web app in springs but I am facing an error in running the project.The error I am facing is

org.apache.jasper.JasperException: An exception occurred processing JSP page /WEB-INF/view/UserDetails.jsp at line 22

19: <c:out value="${chat.username}:"/>
20: <c:out value="${chat.message}"/>
21: </c:forEach>
22: <form:input path="message"/>
23: <input type="submit" value="Send" />
24: </form:form>
25: <br>

and

   org.springframework.beans.NotReadablePropertyException: Invalid property 'message' of bean class [java.util.ArrayList]: Bean property 'message' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter?

My POJO class is

package com.beingjavaguys.domain;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

import org.hibernate.annotations.Generated;
@Entity
@Table(name="messages")
public class Chat {

    @Id
    @GeneratedValue
    @Column(name = "user_id")
    private int id;

    @Column(name="username")
    private String username;

    @Column(name="message")
    private String message;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }


}

and my Dispatcher servlet is

    <bean id="jspViewResolver"
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass"
            value="org.springframework.web.servlet.view.JstlView" />
        <property name="prefix" value="/WEB-INF/view/" />
        <property name="suffix" value=".jsp" />
    </bean>

    <bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${database.driver}" />
        <property name="url" value="${database.url}" />
        <property name="username" value="${database.user}" />
        <property name="password" value="${database.password}" />
    </bean>

    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="annotatedClasses">
            <list>
                <value>com.beingjavaguys.domain.User</value>
                <value>com.beingjavaguys.domain.Chat</value>
            </list>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">${hibernate.dialect}</prop>
                <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
            </props>
        </property>
    </bean>



    <bean id="hibernateTransactionManager"
        class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>
</beans>

My JSP page is*Now I have edited the page*

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Group chat | User Details</title>
</head>
<body>
<center>
<br><br><br><br><br><br>
<div style="color: teal;font-size: 30px">Group Chat</div>
<br><br>
<c:url var="userRegistration" value="saveChat.html"/>
<form:form id="chatMessages" modelAttribute="chat" method="post" action="${userRegistration}">
<c:forEach items="${chat}" var="chat">
<c:out value="${chat.username}:"/>
<c:out value="${chat.message}"/>
</c:forEach>
<form:input path="message"/>
<input type="submit" value="Send" />
</form:form>
<br>
</center>
</body>
</html>

My Controller is

@RequestMapping("/saveChat")
    public ModelAndView saveChat(@ModelAttribute("chat") Chat chat,BindingResult result){
        userService.addChat(chat);
        return new ModelAndView("redirect:/userList");
    }

    @RequestMapping("/userList")
    public ModelAndView getUserList() {
        Map<String, Object> model = new HashMap<String, Object>();
        model.put("chat", userService.getChat());
        return new ModelAndView("UserDetails", model);

    }

I am unable to grasp the problem here(Edited the error).

Upvotes: 0

Views: 176

Answers (1)

Amin Abu-Taleb
Amin Abu-Taleb

Reputation: 4511

In your JSP webpage you're trying to get message property of an object of class ArayList instead of Chat.

Maybe you should try to change modelAttribute name to avoid the name chat used by your list:

<form:form id="chatMessages" modelAttribute="chatModel" method="post" action="${userRegistration}">
<c:forEach items="${chat}" var="user">
<c:out value="${user.username}:"/>
<c:out value="${user.message}"/>
</c:forEach>
<form:input path="message"/>
<input type="submit" value="Send" />
</form:form>

and change it also in:

public ModelAndView saveChat(@ModelAttribute("chatModel") Chat chatModel,BindingResult result){
        userService.addChat(chatModel);
        return new ModelAndView("redirect:/userList");
    }

Upvotes: 1

Related Questions