Jsf 已呈现=”#{search.journeyRecord.valid}";:无法将类java.lang.String的有效类型转换为类java.lang.Integer

Jsf 已呈现=”#{search.journeyRecord.valid}";:无法将类java.lang.String的有效类型转换为类java.lang.Integer,jsf,richfaces,facelets,el,Jsf,Richfaces,Facelets,El,我有一个Java动态Web模块项目(版本2.5),其中包含RichFaces、SpringWebFlow和Hibernate。该项目部署在ApacheTomcat中(服务器中为6.0.20,我的机器中为开发目的为6.0.37和7.0.39)。我经常遇到这样的错误: Caused by: javax.el.ELException: /WEB-INF/flows/monitoring/monitor.xhtml @139,114 rendered="#{search.journeyRecord.va

我有一个Java动态Web模块项目(版本2.5),其中包含RichFaces、SpringWebFlow和Hibernate。该项目部署在ApacheTomcat中(服务器中为6.0.20,我的机器中为开发目的为6.0.37和7.0.39)。我经常遇到这样的错误:

Caused by: javax.el.ELException: /WEB-INF/flows/monitoring/monitor.xhtml @139,114 rendered="#{search.journeyRecord.valid}": Cannot convert valid of type class java.lang.String to class java.lang.Integer
Valid是来自
JourneyRecord
类的临时布尔属性。其声明如下:

@Transient
public boolean isValid() {
    if (search != null) {
        return search.getStatus() == Search.WITH_INSURANCE_COVER;
    } else {
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.HOUR, -12);
        return calendar.after(registrationDate);
    }
}
我将jsf facelets Maven包更新为1.1.15版

搜索Bean:

@Entity
public class Pesquisa implements Serializable {
...

    private char status;
    ...

    /**
     * @return the status
     */
    public char getStatus() {
        return status;
    }

    /**
     * @param status
     *            the status to set
     */
    public void setStatus(char status) {
        this.status = status;
    }

    ...
}
JourneyRecordbean:

@Entity
public class RegistroViagem implements Serializable{
...

    private Date registrationDate;
    ...

    /**
     * @return the registrationDate
     */
    public Date getRegistrationDate() {
        return registrationDate;
    }

    /**
     * @param registrationDate
     *            the registrationDate to set
     */
    public void setRegistrationDate(Date registrationDate) {
        this.registrationDate = registrationDate;
    }

    ...

    @Transient
    public boolean isValid() { ... }
    ...
}
JSF:

。。。
协议号
...

对不起。这是我的混乱,但我认为这个问题对其他人有用

在JSF中:

...
<rich:column style="text-align:center;">
    <f:facet name="header">Protocol Number</f:facet>
    <h:outputText value="#{search.journeyRecord.journeyNumber}" rendered="#{search.journeyRecord.valid}" />
</rich:column>
...
。。。
协议号
...
search.journeyRecord
是一个
列表
。团队的另一个人更改了属性类型

正如@BalusC所说,这是一种复杂的类型。EL尝试使用
toString()
方法获取其内容,然后将其转换为
Integer
。我将
search.journeyRecord
更改为另一个仅返回元素且有效的瞬态属性


感谢所有的评论。

你能分享课程记录和搜索相关bean吗?@HimanshuBhardwaj我更新了我的答案。如果您需要更多信息,请告诉我;)你能添加给你带来问题的JSF代码吗?这个代码不是SSCCE风格的。所以,我只能做一个猜测:Facelets 1.x在复杂组合中的变量作用域中存在一些问题。您是否碰巧在其他地方有名为
valid
的托管bean或
的托管bean?尝试将一个有效的属性/变量重命名为唯一的。谢谢。这是更改为列表的
journeyRecord
属性。我发布了一份关于整个情况的答复。
...
<rich:column style="text-align:center;">
    <f:facet name="header">Protocol Number</f:facet>
    <h:outputText value="#{search.journeyRecord.journeyNumber}" rendered="#{search.journeyRecord.valid}" />
</rich:column>
...