2012-01-04 53 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