2012-01-04 59 views
1

我得到一个迁移JSF 1.2到JSF 2 <c:set> VAR组与空或空值

10:55:06,770 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/Lisa].[Faces Servlet]] Servlet.service() for servlet Faces Servlet threw exception: javax.faces.view.facelets.TagException: //somewhere/mytag.xhtml @22,37 <c:set> var set with null or empty value 
at com.sun.faces.facelets.tag.jstl.core.SetHandler.apply(SetHandler.java:118) [:2.0.3-] 
at com.sun.faces.facelets.tag.jstl.core.IfHandler.apply(IfHandler.java:93) [:2.0.3-] 
at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:94) [:2.0.3-] 
at com.sun.faces.facelets.tag.ui.CompositionHandler.apply(CompositionHandler.java:162) [:2.0.3-] 
at com.sun.faces.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:89) [:2.0.3-] 
at com.sun.faces.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:79) [:2.0.3-] 

什么是理想的解决办法?我试图避免jstl函数,但似乎c:set是不可避免的。

在标签我基本上使用

<c:set var="longLabel" value="#{labelBundle[longLabelKey]}" /> 
<c:if test="#{hv:startsWith(longLabel, '???')}"> 
    <c:set var="longLabel" value="" /> 
</c:if> 

问题是一个普遍的一种:说我有 <c:set var="x" value="#{bean.value}"/>其中bean.value可以为空或空字符串。现在怎么办?

read有关更换UI:与C参数:集 - 我会尝试这一个

回答

2

你可以使用EL 2.2?你可以使用类似#{labels.getLabel(longLabelKey)}的东西,其中labels.getLabel包含所需的逻辑,包括默认值。这不是使用c:set/c:if这是不是真的在这里推荐。

否则,我会在自己的命名空间中使用已定义的静态函数,与提出的labels.getLabel一样。

+0

我更新了我的问题 – Toskan 2012-07-24 09:38:29