Как я могу получить вложенные компоненты ‹p:column› в фаслет с помощью EL

Допустим, у меня есть это:

<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> 

Теперь, как я могу добиться этого, используя <p:columns>

<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>

все примеры и руководства по этой теме охватывают только простые <h:outptText> что насчет компонентов (p:graphicImage,p:commandLink и т. д.), вложенных в столбец, как код выше. как вы этого добиваетесь?


person Jalal Sordo    schedule 26.12.2013    source источник


Ответы (1)


Вы можете визуализировать любой элемент внутри элемента ‹p:columns›.

То, что вы хотите сделать, вероятно, отображает содержимое ячейки по-разному, в зависимости от столбца. Вы можете попробовать что-то вроде этого:

  //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>
person Stephane Lallemagne    schedule 26.12.2013
comment
выдает ошибку при отсутствии свойств, я думаю, проблема связана со свойством свойств: prop1.prop2.prop3, ошибка javax.el.PropertyNotFoundException - person Jalal Sordo; 27.12.2013
comment
Ошибка на exam.examen.rapport.rapportWrittenState? экзамен - это ваш datatable var (который представляет один объект строки), затем проверьте метод getExamen(), затем проверьте метод getRapport() вашего объекта Examen, затем проверьте метод getRapportWrittenState вашего объекта Rapport... Кроме того, я полагаю, что dyna ваш поддерживающий боб? - person Stephane Lallemagne; 27.12.2013
comment
Если тип экзамена Examen class, вам нужно писать не exam.examen.rapport.rapportWrittenState}.png, а exam.rapport.rapportWrittenState}.png - person Stephane Lallemagne; 27.12.2013
comment
Посмотрите, если бы я использовал p: datatable с привязкой, все работает нормально, только мне нужно дважды щелкнуть, чтобы обновить p: datatable, из которого я не мог понять, почему или даже решить, поэтому я подумал об использовании p: столбцы в качестве альтернативного решения , моя настоящая проблема заключается в том, как я могу добиться всего этого с помощью p:columns, я даю значению p:columns ArrayList из p:column, созданный точно так, как я хочу, с порядком, который я хочу, но показать их сложно часть. - person Jalal Sordo; 27.12.2013
comment
чтобы правильно ответить на ваш первый комментарий, в первом столбце отображается ошибка, Facelet не понимает EL, когда он оценивает свойство свойства, например: dyna.selectedExamen.examen.rapport.rapportId - person Jalal Sordo; 27.12.2013
comment
Я догадываюсь, что случилось. Вы не можете использовать вложенные свойства для columnModel.property. #{car['something']} является сокращением от #car.something, т.е. car.getSomething() на стороне компонента. Это неверно, если имя свойства содержит точки. Я не вижу другого подходящего синтаксиса, но вы можете создавать прямые свойства в своем экзаменационном классе. Пример: public String getRapportID() { return getExamen().getRapport().getID(); } и поэтому используйте rapportID в качестве имени свойства. - person Stephane Lallemagne; 27.12.2013
comment
давайте продолжим это обсуждение в чате - person Jalal Sordo; 28.12.2013