2014-10-07 2 views
0

Я работаю над небольшим веб-приложением для обмена сообщениями, чтобы узнать jsp и сервлеты. У меня есть класс MessageModel со следующими свойствами:Свойство PropertyNotFoundException происходит даже тогда, когда присутствует геттер

String toAddress ; 
String fromAddress; 
String messageSubject; 
String messageContent; 
Timestamp messageTime; 
int messageDraft; 

И их соответствующие сеттеры для доступа к jsp.

У меня есть метод, который запрашивает базу данных со всеми сообщениями для сообщений, полученных на конкретный адрес для отображения. Затем он создает новый объект MessageModel и сохраняет его в ArrayList.

public static ArrayList<MessageModel> getReceivedMessages(String toAddress) throws SQLException, ClassNotFoundException{ 
    // creates a arraylist. 
    ArrayList<MessageModel> msgList = new ArrayList<MessageModel>(); 

    // Database connection code.. 

    // The query which gets the required messages from the database and adds them to the list. 
    String query = "SELECT * FROM messages WHERE msg_to='" + toAddress +"' ORDER BY msg_date DESC"; 
    Statement stmt = con.createStatement(); 
    ResultSet rs = stmt.executeQuery(query); 
    if(rs.next()){ 
     while(rs.next()){ 
      String msgTo = rs.getString("msg_to"); 
      String msgFrom = rs.getString("msg_from"); 
      String msgSub = rs.getString("msg_subject"); 
      String msgCnt = rs.getString("msg_matter"); 
      Timestamp msgTime = rs.getTimestamp("msg_date"); 

      MessageModel model = new MessageModel(msgTo,msgFrom,msgSub,msgCnt,msgTime); 
      msgList.add(model); 
     } 
    } 
    return msgList; 
} 

Я называю этот метод из СПЯ и сохранить список как атрибут с помощью

String userName = (String) session.getAttribute("userId"); 
ArrayList<MessageModel> list = MessageModel.getReceivedMessages(userName); 
pageContext.setAttribute("messageList", list); 

Но когда я получить доступ к свойству FROMADDRESS объектов MesasgeModel в списке через <c:forEach> тег, я получить следующее сообщение об ошибке:

javax.el.PropertyNotFoundException: Property 'fromAddress' not found on type com.email.system.MessageModel 

Это часть HTML которой доступ распечатывает содержимое каждого MessageModel объекта.

<c:forEach items="${messageList}" var="message"> 
    <li><c:out value="${message.toAddress}"/> 
     <c:out value="${message.messageSubject}"/> <c:out value="${message.messageTime}"/> 
     <c:out value="${message.messageContent}"/> <c:out value="${message.fromAddress}"/> </li> 
</c:forEach> 

Ошибка возникает, когда я пытаюсь получить доступ к полю toAddress. Свойство toAddress хранится в поле messageSubject, хотя при попытке выполнить тот же запрос в консоли mySql я получаю соответствующие поля в соответствующих столбцах.

exapmle результат на запрос, где я удалил столбец контента,

msg_id msg_to msg_from msg_subject msg_date    msg_is_draft 
4  bigb remember *subject*  2014-10-07 11:01:53 0 
2  bigb remember *subject*  2014-10-07 10:48:43 0 
1  bigb remember *subject*  2014-10-07 10:48:31 0 

EDIT: Это MessageModel класса у меня есть.

public class MessageModel { 
    String toAddress ; 
    String fromAddress; 
    String messageSubject; 
    String messageContent; 
    Timestamp messageTime; 
    int messageDraft; 

    public String getToAddress() { 
     return toAddress; 
    } 

    public String getFromAddress() { 
     return fromAddress; 
    } 

    public String getMessageSubject() { 
     return messageSubject; 
    } 

    public String getMessageContent() { 
     return messageContent; 
    } 


    public Timestamp getMessageTime() { 
     return messageTime; 
    } 

    public int getMessageDraft() { 
     return messageDraft; 
    } 

    public MessageModel(String toAddress,String fromAddress, String messageSubject, String messageContent,Timestamp messageTime){ 
     this.toAddress = toAddress; 
     this.messageSubject = messageSubject; 
     this.messageContent = messageContent; 
     this.messageTime = messageTime; 
     this.fromAddress = fromAddress; 
    } 

    public void sendMessage(MessageModel model){ 
     //Gets the related properties from the objects and stores it in the database 
    } 
    public static ArrayList<MessageModel> getReceivedMessages(String toAddress){ 
     //Gets the messages sent to 'toAddress' 
    } 
} 
+1

Опубликовать свой класс MessageModel. Свойства производятся от геттеров/сеттеров, а не от имени поля. Поэтому у вас должен быть метод getToAddress() 'для свойства' toAddress'. –

+0

Я использую intelliJ, я использовал инструмент для вставки кода для создания сеттеров для класса. Я понял, как jsp требует их в соответствии с спецификацией JavaBeans из другого вопроса SO. – Bhargav

+1

Как всегда с такими проблемами, попробуйте полностью очистить, перестроить, перевернуть. – Magnilex

ответ

2

Оказывается, если вы внести некоторые изменения в любой исходный файл Java, который вы используете в вас приложения вы должны сделать полное восстановление и перераспределить для того, чтобы изменения происходят.

В моем коде не было ничего плохого, когда я задал свой вопрос, вместо того, чтобы перераспределять, я просто обновлял ресурсы. Это только обновляет изменения, внесенные в JSP, а не в java-источники.

Смежные вопросы