如何使用JSF、Primefaces和Richfaces生成矩阵

如何使用JSF、Primefaces和Richfaces生成矩阵,jsf,matrix,datatable,primefaces,richfaces,Jsf,Matrix,Datatable,Primefaces,Richfaces,我试图在JSF2.2中用Primefaces 6.2和Richfaces 4.5.16.Final创建一个5x5矩阵 很像。 唯一的区别是,我想要编辑每个单元格的选项(带有下拉列表)。 我设法用dataTable创建了5x5矩阵,但这只给了我编辑整个第一行的选项 这里的问题是dataTable管理每行的数据,而我想访问每单元格的数据。 我目前的html是: <rich:dataTable value="#{testBean.data}" var="li

我试图在JSF2.2中用Primefaces 6.2和Richfaces 4.5.16.Final创建一个5x5矩阵

很像。 唯一的区别是,我想要编辑每个单元格的选项(带有下拉列表)。 我设法用dataTable创建了5x5矩阵,但这只给了我编辑整个第一行的选项

这里的问题是dataTable管理每行的数据,而我想访问每单元格的数据。

我目前的html是:

    <rich:dataTable value="#{testBean.data}" var="line" id="matrixTable" rowKeyVar="index" columnClasses="cellWidth">
                <f:facet name="header">
                    <rich:columnGroup>
                        <rich:column rowspan="2" style="width: 150px">
                            <h:outputText value="Ernst"/>
                        </rich:column>
                        <rich:column colspan="5">
                            <h:outputText value="Waarschijnlijkheid"/>
                        </rich:column>
                        <rich:column breakRowBefore="true" width="" style="width: 150px">
                            <h:outputText value="A: Onwaarschijnlijk"/>
                        </rich:column>
                        <rich:column style="width: 150px">
                            <h:outputText value="B: Mogelijk"/>
                        </rich:column>
                        <rich:column style="width: 150px">
                            <h:outputText value="C: Waarschijnlijk"/>
                        </rich:column>
                        <rich:column style="width: 150px">
                            <h:outputText value="D: Zeer waarschijnlijk"/>
                        </rich:column>
                        <rich:column style="width: 150px">
                            <h:outputText value="E: Zeker"/>
                        </rich:column>
                    </rich:columnGroup>
                </f:facet>
                <rich:column >
                    <h:outputText value="#{line.ROW_LABELS[index + 1]}"/>
                </rich:column>

                <rich:column style="background-color: #{line.inzetmogelijkhedenList[0].kleur}">
                    <div class="tooltip">

                        <c:choose>
                            <c:when test="#{testBean.readOnly}">
                                <h:outputText value="#{testBean.data[0].inzetmogelijkhedenList[0].code}"/>
                            </c:when>
                            <c:otherwise>
                                <h:selectOneMenu value="#{testBean.data[0].inzetmogelijkhedenList[0].code}" id="a1" label="a1" disabled="#{testBean.locked}">
                                    <f:selectItems value="#{testBean.inzetmogelijkhedenList}" var="b" itemLabel="#{b.omschrijving}"/>
                                </h:selectOneMenu>
                            </c:otherwise>
                        </c:choose>

                        <span class="tooltiptext">#{line.inzetmogelijkhedenList[0].omschrijving}</span>
                    </div>
                </rich:column>
                <rich:column style="background-color: #{line.inzetmogelijkhedenList[1].kleur}">
                    <div class="tooltip">
                        <h:outputText value="#{line.inzetmogelijkhedenList[1].code}"/>
                        <span class="tooltiptext">#{line.inzetmogelijkhedenList[1].omschrijving}</span>
                    </div>
                </rich:column>
                <rich:column style="background-color: #{line.inzetmogelijkhedenList[2].kleur}">
                    <div class="tooltip">
                        <h:outputText value="#{line.inzetmogelijkhedenList[2].code}"/>
                        <span class="tooltiptext">#{line.inzetmogelijkhedenList[2].omschrijving}</span>
                    </div>
                </rich:column>
                <rich:column style="background-color: #{line.inzetmogelijkhedenList[3].kleur}">
                    <div class="tooltip">
                        <h:outputText value="#{line.inzetmogelijkhedenList[3].code}"/>
                        <span class="tooltiptext">#{line.inzetmogelijkhedenList[3].omschrijving}</span>
                    </div>
                </rich:column>
                <rich:column style="background-color: #{line.inzetmogelijkhedenList[4].kleur}">
                    <div class="tooltip">
                        <h:outputText value="#{line.inzetmogelijkhedenList[4].code}"/>
                        <span class="tooltiptext">#{line.inzetmogelijkhedenList[4].omschrijving}</span>
                    </div>
                </rich:column>
            </rich:dataTable>

#{line.inzetmogelijkhedenst[0].omschrijving}
#{line.inzetmogelijkhedenst[1].omschrijving}
#{line.inzetmogelijkhedenst[2].omschrijving}
#{line.inzetmogelijkhedenst[3].omschrijving}
#{line.inzetmogelijkhedenst[4].omschrijving}
这是支持bean:

@ViewScoped
@ManagedBean(name = "testBean")
public class testBean {

public List<Inzetmogelijkheden> getInzetmogelijkhedenList() {
    return referentieService.findAllActueel(Inzetmogelijkheden.class, getUser());
}

public List<RisicomatrixRegel> getData() {
    // actuele IZM uit DB halen
    List<Inzetmogelijkheden> actueleInzetmogelijkheden = getInzetmogelijkhedenList();

    RisicomatrixRegel line1 = new RisicomatrixRegel(Arrays.asList(actueleInzetmogelijkheden.get(0), actueleInzetmogelijkheden.get(0), actueleInzetmogelijkheden.get(0), actueleInzetmogelijkheden.get(0), actueleInzetmogelijkheden.get(1)));
    RisicomatrixRegel line2 = new RisicomatrixRegel(Arrays.asList(actueleInzetmogelijkheden.get(2), actueleInzetmogelijkheden.get(2), actueleInzetmogelijkheden.get(2), actueleInzetmogelijkheden.get(2), actueleInzetmogelijkheden.get(1)));
    RisicomatrixRegel line3 = new RisicomatrixRegel(Arrays.asList(actueleInzetmogelijkheden.get(2), actueleInzetmogelijkheden.get(2), actueleInzetmogelijkheden.get(2), actueleInzetmogelijkheden.get(3), actueleInzetmogelijkheden.get(1)));
    RisicomatrixRegel line4 = new RisicomatrixRegel(Arrays.asList(actueleInzetmogelijkheden.get(3), actueleInzetmogelijkheden.get(3), actueleInzetmogelijkheden.get(3), actueleInzetmogelijkheden.get(1), actueleInzetmogelijkheden.get(1)));
    RisicomatrixRegel line5 = new RisicomatrixRegel(Arrays.asList(actueleInzetmogelijkheden.get(1), actueleInzetmogelijkheden.get(1), actueleInzetmogelijkheden.get(1), actueleInzetmogelijkheden.get(1), actueleInzetmogelijkheden.get(1)));

    return new ArrayList<>(Arrays.asList(line1, line2, line3, line4, line5));
}
@ViewScoped
@ManagedBean(name=“testBean”)
公共类testBean{
公共列表GetInzetmogelijkedEnlist(){
返回referenceservice.findAllActueel(Inzetmogelijkheden.class,getUser());
}
公共列表getData(){
//伊兹姆哈伦学院
List actueleInzetmogelijkheden=getInzetmogelijkhedenList();
RisicomatrixRegel line1=新的RisicomatrixRegel(Arrays.asList(actueleInzetmogelijkheden.get(0)、actueleInzetmogelijkheden.get(0)、actueleInzetmogelijkheden.get(0)、actueleInzetmogelijkheden.get(1));
RisicomatrixRegel line2=新的RisicomatrixRegel(Arrays.asList(actueleInzetmogelijkheden.get(2)、actueleInzetmogelijkheden.get(2)、actueleInzetmogelijkheden.get(2)、actueleInzetmogelijkheden.get(1));
RisicomatrixRegel line3=新的RisicomatrixRegel(Arrays.asList(actueleInzetmogelijkheden.get(2)、actueleInzetmogelijkheden.get(2)、actueleInzetmogelijkheden.get(3)、actueleInzetmogelijkheden.get(1));
RisicomatrixRegel line4=新的RisicomatrixRegel(Arrays.asList(actueleInzetmogelijkheden.get(3)、actueleInzetmogelijkheden.get(3)、actueleInzetmogelijkheden.get(1)、actueleInzetmogelijkheden.get(1));
RisicomatrixRegel line5=新的RisicomatrixRegel(Arrays.asList(actueleInzetmogelijkheden.get(1)、actueleInzetmogelijkheden.get(1)、actueleInzetmogelijkheden.get(1)、actueleInzetmogelijkheden.get(1));
返回新的ArrayList(Arrays.asList(第1行、第2行、第3行、第4行、第5行));
}
}

读取模式下的结果:

编辑模式下的结果:


有什么提示吗?

在使用Primefaces时使用
rich
前缀有什么具体原因吗

似乎您是从迁移附加到Richfaces的遗留代码而来的,因此,作为遗留代码,您使用标记处理程序而不是UI组件,这就是为什么您在Datatable中获得(仅处理的第一行)

c:选择
块替换为条件渲染

此外,您只访问
输出文本中的第一行和
选择一个菜单
组件,用
值替换它们

另外,也是最后一点,永远不要使用getter方法在JSF托管bean中构建您的结构!可以在视图渲染时调用它们。相反,在用
@PostConstruct
注释的方法中,或使用
f:viewAction

@ManagedBean
@视域
公共类Bean{
私人名单数据;
@施工后
公共void init(){
//伊兹姆哈伦学院
列出actueleInzetmogelijkheden=referenceservice.findAllActueel(Inzetmogelijkheden.class,getUser());
RisicomatrixRegel line1=新的RisicomatrixRegel(Arrays.asList(actueleInzetmogelijkheden.get)(0),
actueleInzetmogelijkheden.get(0),actueleInzetmogelijkheden.get(0),actueleInzetmogelijkheden.get(0),actueleInzetmogelijkheden.get(1));
RisicomatrixRegel line2=新的RisicomatrixRegel(Arrays.asList(actueleInzetmogelijkheden.get)(2),
actueleInzetmogelijkheden.get(2),actueleInzetmogelijkheden.get(2),actueleInzetmogelijkheden.get(2),actueleInzetmogelijkheden.get(1));
RisicomatrixRegel line3=新的RisicomatrixRegel(Arrays.asList(actueleInzetmogelijkheden.get)(2),
actueleInzetmogelijkheden.get(2),actueleInzetmogelijkheden.get(2),actueleInzetmogelijkheden.get(3),actueleInzetmogelijkheden.get(1));
里斯