【问题标题】:JSF2 Building Dynamic EL ExpressionsJSF2 构建动态 EL 表达式
【发布时间】:2013-03-24 01:04:33
【问题描述】:

我正在使用 JSTL forEach 和 h:dataTable 创建一个动态表,并很好地显示所有控件和潜在的错误消息,但现在我坚持为每个控件设置值。我需要创建(我认为)一个动态 EL 表达式来设置值,但我的任何版本都无法正常工作。我希望使用 c:out 构建表达式,但发现该标记在 JSF2 中不可用。

那么,是否可以在页面中构建动态表达式? 如果控件尚未构建,我如何在 backing bean 中设置表达式?

 <h:dataTable id="dtDetails" styleClass="slate_table" value="#{remediationDetail.eventList}" var="dataItem">
 <c:forEach items="#{remediationDetail.eventHeaders}" var="key">
  <h:column>
      <f:facet name="header">#{key.fieldDefinition.fieldConfiguration.customLabel}</f:facet>
         <h:inputText value="" id="txtNumber" styleClass="remediation_textbox error_marker" title="#{remediationDetail.errorMessages(dataItem.id, key.fieldDefinition.id)}">
           <f:convertNumber maxFractionDigits="0" maxIntegerDigits="19"/>
  </h:column>
 </c:forEach>
</h:dataTable>

一如既往,感谢任何帮助或指导。

问候,

迈克

【问题讨论】:

  • 我认为当 foreach 将创建多个具有相同 id 的 inputText 时你会遇到问题。如果你省略 id 属性,你可以避免这种情况发生。
  • 你有没有试过写类似的东西:#{remediationDetail.errorMessages(#{dataItem.id},#{key.fieldDefinition.id}?
  • 我还没有走这条路,但很快就会走。动态表达式会更快,因为我会知道表达式引用的确切变量/方法。调用支持 bean 将使我使用反射并通过对象变量运行循环。在 JSF 接管并呈现页面后,Id 应该是唯一的。
  • 好的,告诉我们它是否有效,我很想知道它:)
  • 由于您使用的是 JSF 2,因此最好使用 &lt;ui:repeat&gt; 并在此基础上构建您的 &lt;table&gt;。另外,您可能想阅读此 Q/A:JSTL in JSF2 Facelets… makes sense?

标签: jsf jsf-2 jstl el


【解决方案1】:

我无法创建动态 EL 表达式。所以,我结束了使用 c:forEach 的索引来帮助定义我正在寻找的值。这个结果的唯一问题是我希望我将要显示的数据在数组中具有相同数量的位置。

<c:forEach items="#{remediationDetail.eventHeaders}" var="key" varStatus="looper">
    <h:column>
        <f:facet name="header">#{key.fieldDefinition.fieldConfiguration.customLabel}</f:facet>
<h:inputText id="txtNumber" value="#{dataItem.entityList[looper.index].val}">
   <f:convertNumber maxFractionDigits="0" maxIntegerDigits="19"/>
</h:inputText>
    </h:column>
 </c:forEach>

【讨论】:

    【解决方案2】:

    在我的例子中,以下有助于构建动态 EL。

    <ui:param name="beanName" value="myBackedBean"/>
    <ui:param name="propertyName" value="field1"/>
    <ui:param name="nestedPropertyName" value="field1"/>
    
    <p:inputTextarea value="#{sessionScope[beanName][propertyName][nestedPropertyName]}"/>
    

    灵感来自topic

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多