Миграция JSF 1.2 в JSF 2переменная установлена ​​с нулевым или пустым значением - PullRequest
1 голос
/ 04 января 2012

Я получаю

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 может быть нулевой или пустой строкой.Что теперь?

Я прочитал о замене ui: param на c: set - я попробую этот

1 Ответ

2 голосов
/ 04 января 2012

Можете ли вы использовать EL 2.2?Вы можете использовать что-то вроде #{labels.getLabel(longLabelKey)}, где label.getLabel содержит необходимую логику, включая значение по умолчанию.Это вместо того, чтобы использовать c:set / c:if, который на самом деле здесь не рекомендуется.

В противном случае я бы пошел с определенной статической функцией в собственном пространстве имен, делая то же самое, что и предложенный label.getLabel.

...