【问题标题】:How can I get the nested components of a <p:column> in a facelet using EL如何使用 EL 在 facelet 中获取 <p:column> 的嵌套组件
【发布时间】:2014-01-14 09:42:31
【问题描述】:

假设我有这个:

<p:column headerText="R"
          style=" text-align: center;"
          width="10"
          rendered="true">
  <p:commandLink id="MRepShowButton" update=":form1:display" onclick="EditorDialog.show();"  title="Editer le compte rendu"> 
  <f:setPropertyActionListener value="#{exam}" target="#{dyna.selectedExamen}" />  
     <p:graphicImage id="img1" value="/images/study_Report_icons/Text/0.png" rendered="#{exam.examen.rapport.rapportWrittenState == null}"/>
     <p:graphicImage id="img2" value="/images/study_Report_icons/Text/#{exam.examen.rapport.rapportWrittenState}.png" rendered="#{exam.examen.rapport.rapportWrittenState != null}"/>
  </p:commandLink>
</p:column> 

现在我如何使用&lt;p:columns&gt; 实现这一目标

<p:columns value="#{tableBean.columns}" var="column" columnIndexVar="colIndex" 
           sortBy="#{column.property}" filterBy="#{column.property}">
                    <f:facet name="header">
                        #{column.header}
                    </f:facet>

                    #{car[column.property]}

                </p:columns>

关于该主题的所有示例和教程仅涵盖简单的&lt;h:outptText&gt; 组件(p:graphicImage、p:commandLink 等)嵌套在一个列中,如上面的代码。 你是怎么做到的?

【问题讨论】:

    标签: java jsf jakarta-ee primefaces dynamic-columns


    【解决方案1】:

    您可以在 元素内渲染任何元素。

    您想要做的可能是根据列以不同方式呈现单元格内容。你可以试试这样的:

      //classic rendering (for all cells)
      <h:outputText value="#{car[column.property]}"/>
    
      //conditional rendering (for 'report' cells only)
      <h:panelGroup rendered="#{column.property == 'report'}">
        <p:commandLink id="MRepShowButton" update=":form1:display" onclick="EditorDialog.show();"  title="Editer le compte rendu">
          <f:setPropertyActionListener value="#{exam}" target="#{dyna.selectedExamen}" />  
          <p:graphicImage id="img1" value="/images/study_Report_icons/Text/0.png" rendered="#{exam.examen.rapport.rapportWrittenState == null}"/>
          <p:graphicImage id="img2" value="/images/study_Report_icons/Text/#{exam.examen.rapport.rapportWrittenState}.png" rendered="#{exam.examen.rapport.rapportWrittenState != null}"/>
        </p:commandLink>
      </h:panelGroup>
    

    【讨论】:

    • 它在未创建属性时给出错误,我认为问题出在属性的属性上:prop1.prop2.prop3,错误是 javax.el.PropertyNotFoundException
    • “exam.examen.rapport.rapportWrittenState”是否有错误?考试是你的数据表变量(代表一个行对象),然后检查你的 getExamen() 方法,然后检查你的 Examen 对象的 getRapport() 方法,然后检查你的 Rapport 对象的 getRapportWrittenState 方法......另外,我想 dyna 是你的后盾?
    • 如果考试类型是Examen class,你不需要写exam.examen.rapport.rapportWrittenState}.png但是exam.rapport.rapportWrittenState}.png
    • 看看我是否使用 p:datatable 绑定一切正常,只需要单击两次来更新我无法理解为什么甚至无法解决的 p:datatable,所以我想使用 p:columns 作为替代解决方案,我真正的问题是如何使用 p:columns 实现整个事情,我给 p:columns 值一个 p:column 的 ArrayList,完全按照我想要的顺序创建想要,但展示它们是困难的部分。
    • 我猜怎么了。您不能对 columnModel.property 使用嵌套属性。 #{car['something']} 是#car.something 的缩写,即bean 端的“car.getSomething()”。如果属性名称包含点,则无效。我没有看到可以使用的其他语法,但您可以在考试课程上创建直接属性。示例:public String getRapportID() { return getExamen().getRapport().getID(); } 等使用 rapportID 作为属性名称。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-07
    • 2013-09-30
    • 2019-09-13
    • 2016-02-24
    • 1970-01-01
    • 2021-06-19
    • 2018-07-15
    相关资源
    最近更新 更多