【问题标题】:Websphere 7 & JSTL: Cannot get value from arrays -> Missing Resource in EL implementation: ???propertyNotReadable?Websphere 7 和 JSTL:无法从数组中获取值 -> EL 实现中缺少资源:???propertyNotReadable?
【发布时间】:2010-12-08 08:25:27
【问题描述】:

自从从 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} 访问它,这很有效。访问数组有问题吗?

【问题讨论】:

    标签: java jsp websphere el


    【解决方案1】:

    我想我已经找到了该问题的部分解释和解决方法。

    我在 Fair 类中添加了一个新的索引属性来检查索引
    属性工作正常。他们是这样。

    我为 days 数组添加了一个新的 getter,并将其命名为 getXyz()。那行得通。

    我注意到原来的 getter 和 setter 是不对称的(歇斯底里的原因)。

    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;                                              
    }  
    

    问题不再出现。

    我没有解释为什么这可以解决问题,因为我认为只有 getter 被使用。这个“解决方案”对我来说没问题,因为代码看起来更好并且可以工作。

    (如果您知道为什么这样可以解决问题,请随时添加评论)

    【讨论】:

      【解决方案2】:

      实际上还有另一个问题:在使用的 EL 实现中找不到实际的异常消息。这表明您的类路径中有另一个旧版本的 EL 实现,它与应用程序服务器提供的冲突。

      确保您在 webapp 的 /WEB-INF/lib 中没有任何特定于一台服务器的 JAR 文件。清理文件夹以删除任何特定于服务器的 JAR 文件。

      【讨论】:

      • 刚刚查看了服务器。 /WEB-INF/lib 除了 struts.jar 之外是空的。那个罐子是自动放在那里的,我没有明确地放在那里。 +1 '因为这是一个有用的提示。
      • 检查其他类路径位置,例如JRE/lib、JRE/lib/ext。这显然是不同版本的类/JAR 的类路径污染的标志。
      • 感谢您的评论。我到底应该寻找什么?我很确定我们正在进行干净的部署 - 删除服务器、创建服务器、安装等。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多