以编程方式获取JSTL EL Context的表达式值

时间:2012-02-15 09:35:40

标签: jsf jsf-2 jstl custom-component

环境:JSF 2.0(Mojarra 4.0),Facelets,Richfaces,Websphere 7.0

我有一个自定义的inputText组件,它需要在JSTL EL Context中执行EL表达式。我有一个特殊情况,我需要JSTL“foreach”来创建一个复杂的表(不能使用“a4j:reapeat”)。

自定义组件示例:

<c:forEach var="cell" items="#{line.cellDescriptorList}" >
        <rich:column>
            <k:inputText onkeyup="#{cell.onKeyup}" id="#{cell.jsfId}" value="#{cell.wert.wert}">
                <f:converter converterId="PercentageConverterBigDecimal" />
            </k:inputText>
        </rich:column>
</c:forEach>

在我的自定义组件Renderer中,我需要评估#{cell}上的表达式。该变量存储在JSTL(JSP?)EL上下文中。 在 JSF EL上下文或 Facelets EL上下文中执行表达式可以正常工作。 但是如何以编程方式访问 JSTL EL上下文?

JSF EL上下文的示例:

final ELContext elContext = facesContext.getELContext();
final Application application = facesContext.getApplication();
ExpressionFactory expressionFactory = application.getExpressionFactory();
ValueExpression exp = expressionFactory.createValueExpression(elContext, expression, Object.class);
Object result = exp.getValue(elContext);

Facelets EL上下文here的示例。

您能否指点一下JSTL EL背景的解决方案?

提前致谢。 启

1 个答案:

答案 0 :(得分:0)

这个JSP是否有帮助?

<%@ page import="java.util.Arrays,javax.el.*" %>
<jsp:useBean id="list" class="java.util.ArrayList" />
<jsp:useBean id="newList" class="java.util.ArrayList" />
<%
  list.addAll(Arrays.asList("red","green","blue"));
  newList.addAll(Arrays.asList("brown", "yellow", "purple"));
  JspFactory jspFactory= JspFactory.getDefaultFactory();
  ExpressionFactory expFactory = jspFactory.getJspApplicationContext(application).getExpressionFactory();
  ELContext elContext =  pageContext.getELContext();
  ValueExpression valueEx = expFactory.createValueExpression(elContext, "${list}",String.class);
%>
My favorite colors are ${list[0]}, ${list[1]}, and ${list[2]}.<br/>
<% valueEx.setValue(elContext, newList); %>
No, I changed my mind. I like ${list[0]}, ${list[1]}, and ${list[2]}.