在h:dataTable中创建一个特定行

时间:2016-07-13 08:11:36

标签: jsf datatable selectonemenu

我有一个表单,其中包含一些从用户那里获取输入的字段。然后,根据用户在初始表单中选择的选项/字段,该输入用于生成通过Hibernate使用数据库中的信息填充的dataTable。

我需要以某种方式为正在被点击的特定记录生成一个下拉菜单,然后以特定的文件格式下载该记录(我已经有类似的方法由其他人做这个)。 / p>

这是我的dataTable的样子:

<h:form id="form2">
<t:dataTable binding="#{table}" rendered="#{searchArhivaUIBean.renderTable}" value="#{searchArhivaUIBean.nonEdiAbstractList}"
 var="dataItem" border="0" cellspacing="2" width="100%" id="tdtbl"
  headerClass="tableHeader" rowClasses="rowOdd,rowEven" columnClasses="Column">
<t:column>
    <!-- display currently selected row number -->
    <f:facet name="header">
        <t:outputText value="Nr"/>
    </f:facet>
    <t:outputText value="#{table.rowIndex + 1}"/>
</t:column>
<t:column>
  <f:facet name="header">
   <t:outputText value="Data Mesaj"/>
  </f:facet>
  <t:outputText value="#{dataItem.dataMesaj}">
    <f:convertDateTime timeZone="#{tzUIBean.tz}" pattern="dd.MM.yyyy" />
  </t:outputText>
 </t:column>
 <t:column>
  <f:facet name="header">
   <t:outputText value="Numar Mesaj"/>
  </f:facet>
  <t:outputText value="#{dataItem.numarMesaj}"/>
 </t:column>
 <t:column>
  <f:facet name="header">
   <t:outputText value="Societate Sender"/>
  </f:facet>
  <t:outputText value="#{dataItem.societateSender}"/>
 </t:column>
 <t:column>
  <f:facet name="header">
   <t:outputText value="Societate Receiver"/>
  </f:facet>
  <t:outputText value="#{dataItem.societateReceiver}"/>
 </t:column>
</t:dataTable>
</h:form>

这将生成一个dataTable,填充项目。当我点击一条消息(&#34; Nr&#34;列(dataTable中的第一列))或&#34; Numar Mesaj&#34;时,我现在可以创建一个下拉列表的任何想法。柱?我需要下拉列表显示在dataTable中特定行的下方,因此我可以从该下拉列表中选择文件格式,并将该特定记录下载为.pdf,.xls或其他任何类型的文件。

至少,这就是我认为它的工作方式。任何想法都表示赞赏。

1 个答案:

答案 0 :(得分:0)

嗯,使用适当的JSF框架(例如Prime Faces)会更容易。他们为这类东西配备了专用组件。

使用默认的JSF,它将是一大堆工作。我可以想象这样的事情: 首先,您需要使用例如h:commandLink使您的一个列可单击。此(单击)操作可能会更改特殊标志,这些标志将用于显示带格式的额外行。 下一步是为每个数据行创建额外的行,其中隐藏第二行(通过上面的标志)。单击列中的链接将显示带格式的额外行。 似乎唯一的困难是只显示1行,而不是全部,所以事件和标志需要非常聪明。您必须跟踪当前行选择并在显示额外行时使用它。