Jsf 已呈现=”#{search.journeyRecord.valid}";:无法将类java.lang.String的有效类型转换为类java.lang.Integer
我有一个Java动态Web模块项目(版本2.5),其中包含RichFaces、SpringWebFlow和Hibernate。该项目部署在ApacheTomcat中(服务器中为6.0.20,我的机器中为开发目的为6.0.37和7.0.39)。我经常遇到这样的错误: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
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>
...