Websphere 7 & JSTL: невозможно получить значение из массивов -> отсутствует ресурс в реализации EL: ??? propertyNotReadable? - PullRequest
1 голос
/ 08 декабря 2010

После обновления с WAS6.1 до WAS7.0 я получаю сообщение об ошибке при попытке отобразить значение, содержащееся в массиве.

Java:

private Date[] days = new Date[10];
public Date[] getDays() {
    return days;
}

JSP:

<td><fmt:formatDate value="${fair.days[0]}" pattern="dd.MM.yyyy" /><td>

Это вызывает следующую ошибку:

[Exception in:/tilesContent/listFairs_bodyarea.jsp] Missing Resource in EL
 implementation: ???propertyNotReadable??? 

Мое приложение работает нормально при развертывании на сервере WAS6.1.Проблема возникает только на WAS7.

Я добавил метод getFirstDay (), который возвращает days [0], и получил к нему доступ с помощью $ {fair.firstDay}, и это работает.Есть ли проблема с доступом к массивам?

Ответы [ 2 ]

3 голосов
/ 11 января 2011

Я думаю, что нашел частичное объяснение и обойти проблему.

Я добавил новое индексированное свойство в класс Fair, чтобы убедиться, что индексированные
свойства работают нормально.Они делают.

Я добавил новый метод получения для массива days и дал ему имя getXyz ().Это работало хорошо.

Я заметил, что исходный геттер и сеттер были асимметричными (истерические причины).

public Date[] getDays() {                                               
    return days;                                                        
}                                                                       
public void setDay(int day, Date date) {                                
    this.days[day] = date;                                              
}       

Я знаю, что это немного странно, но до сих пор это работало.В любом случае, я изменил методы следующим образом:

public Date[] getDays() {                                               
    return days;                                                        
}                                                                       
public void setDays(Date[] dates) {                                     
    this.days = dates;                                                  
}                                                                       
public void setDay(int day, Date date) {                                
    this.days[day] = date;                                              
}  

Проблема больше не возникает.

У меня нет объяснения, почему это решает проблему, так как я думаю, что используется только геттер.Это «решение» подходит мне, так как код выглядит лучше и работает.

(не стесняйтесь добавлять комментарии, если знаете, ПОЧЕМУ это решает проблему)

1 голос
/ 08 декабря 2010

На самом деле есть еще одна проблема: фактическое сообщение об исключении не может быть найдено в используемой реализации EL.Это означает, что у вас есть другая, более старая версия, EL-реализация в вашем classpath, которая конфликтует с той, что была предоставлена ​​сервером приложений.

Убедитесь, что в веб-приложении /WEB-INF/lib отсутствуют файлы JARспецифично для одного сервера.Очистите папку, чтобы избавиться от любых специфичных для сервера файлов JAR.

...