仅使用动态列和行在(Primefaces)dataTable的第一行上获取inputText

时间:2016-04-10 12:50:31

标签: primefaces datatable jsf-2.2

我有一个Primefaces(5.0)Datatable,包含动态列和动态行。 简而言之,我的问题是我如何设置它以使第一行的单元格是一系列inputText或inputTextarea,而第一行下面的行是outputText?

详细说明,xhtml(遵循BalusC对Creating and populating a DataTable dynamically in JSF2.0的回应)如下:

<p:dataTable var="rowMap" value="#{reviewController.rowMapList}" scrollable="true" scrollWidth="900px"  >
            <p:columns value="#{reviewController.columnNameList}" var="columnName" headerText="#{columnName}">
                <f:facet name="header" >#{columnName}</f:facet>
                <f:facet name="header"><p:inputTextarea  value="#{rowMap[columnName]}"  /></f:facet>
                <h:outputText value="#{rowMap[columnName]}"  />
            </p:columns>
        </p:dataTable> 

所以我在想,使用inputTexts对行进行facet时可能存在问题,因为facet似乎没有参与dataTable数据迭代。 那么我如何将第一行作为“正常”行(而不是问题的一部分) - 但仍然将inputTextarea应用于第一行,而不将inputTextareas应用于所有行?

为了让它正常工作,我在reviewController上使用@PostConstruct进行静态设置,如下所示。

@Named
@ViewScoped
public class ReviewController implements Serializable {

private List<String> columnNameList;
private ArrayList<Map<String, Object>> rowMapList;
private Map<String, Object> rowMap;

@PostConstruct
public void init() {
     columnNameList = new ArrayList<>();
     rowMapList = new ArrayList<>();

     columnNameList.add("Source Report");
     columnNameList.add("Overview");
     columnNameList.add("Question 1");
     columnNameList.add("Question 2");
     columnNameList.add("Question 3");

     Map<String, Object> m = new HashMap<>();
     m.put(columnNameList.get(0), "Assessor1");
     m.put(columnNameList.get(1), "Assessor1 overview text");
     m.put(columnNameList.get(2), "Assessor1 comment on Q1");
     m.put(columnNameList.get(3), "Assessor1 comment on Q2");
     m.put(columnNameList.get(4), "Assessor1 comment on Q3");
     rowMapList.add(m);
     m = new HashMap<>();
     m.put(columnNameList.get(0), "Assessor2");
     m.put(columnNameList.get(1), "Assessor2 overview text");
     m.put(columnNameList.get(2), "Assessor2 comment on Q1");
     m.put(columnNameList.get(3), "Assessor2 comment on Q2");
     m.put(columnNameList.get(4), "Assessor2 comment on Q3");
     rowMapList.add(m);
     //etc
}

视觉上看起来像这样:

enter image description here

我想要的是让第一行是InputTextarea的一行,因此用户可以在每个第一行单元格中添加注释以响应其下方行的内容。我已经在视觉上实现了它 - 但正如我上面所说,它不起作用inputTextareas(我假设因为它们在facets中)没有挂钩到rowMap和columnName迭代

我已经查看过primefaces可编辑数据表(http://www.primefaces.org/showcase/ui/data/datatable/edit.xhtml) - 这有点像所需要的。但是它会使所有行都可编辑,而不仅仅是第一行。在这种情况下,进一步的复杂性是动态应用列和行。

任何评论或协助表示赞赏。感谢。

0 个答案:

没有答案