如何解决如何使用JSF,Primefaces和Richfaces
我试图在JSF 2.2中使用Primefaces 6.2和Richfaces 4.5.16.Final创建一个5x5矩阵。
非常类似于Generate Matrix Datatable with JSF Framework like Primefaces。 唯一的区别是,我希望该选项可以编辑每个单元格(带有下拉菜单)。 我设法用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>
这是支持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(1)));
RisicomatrixRegel line2 = new RisicomatrixRegel(Arrays.asList(actueleInzetmogelijkheden.get(2),actueleInzetmogelijkheden.get(2),actueleInzetmogelijkheden.get(1)));
RisicomatrixRegel line3 = new RisicomatrixRegel(Arrays.asList(actueleInzetmogelijkheden.get(2),actueleInzetmogelijkheden.get(3),actueleInzetmogelijkheden.get(1)));
RisicomatrixRegel line4 = new RisicomatrixRegel(Arrays.asList(actueleInzetmogelijkheden.get(3),actueleInzetmogelijkheden.get(1),actueleInzetmogelijkheden.get(1)));
RisicomatrixRegel line5 = new RisicomatrixRegel(Arrays.asList(actueleInzetmogelijkheden.get(1),actueleInzetmogelijkheden.get(1)));
return new ArrayList<>(Arrays.asList(line1,line2,line3,line4,line5));
}
}
有任何提示吗?
解决方法
在使用Primefaces时使用rich
前缀有什么特殊的原因吗?
似乎您来自迁移附加到Richfaces的旧代码,因此,作为旧代码,您使用标签处理程序而不是UI组件,这就是为什么您在其中获得an unexpected behaviour(仅处理第一行)的原因您的数据表。
将c:choose
块替换为条件渲染。
此外,您仅访问outputText
和selectOneMenu
组件中的第一行,将它们替换为line
值。
最后,永远不要使用getter方法在JSF托管bean中构建您的结构!视图渲染时,它们可以称为more than once。而是使用@PostConstruct
注释的方法build up your data或使用f:viewAction
:
@ManagedBean
@ViewScoped
public class Bean {
private List<RisicomatrixRegel> data;
@PostConstruct
public void init() {
// actuele IZM uit DB halen
List<Inzetmogelijkheden> actueleInzetmogelijkheden = referentieService.findAllActueel(Inzetmogelijkheden.class,getUser());
RisicomatrixRegel line1 = new RisicomatrixRegel(Arrays.asList(actueleInzetmogelijkheden.get(0),actueleInzetmogelijkheden.get(0),actueleInzetmogelijkheden.get(1)));
RisicomatrixRegel line2 = new RisicomatrixRegel(Arrays.asList(actueleInzetmogelijkheden.get(2),actueleInzetmogelijkheden.get(2),actueleInzetmogelijkheden.get(1)));
RisicomatrixRegel line3 = new RisicomatrixRegel(Arrays.asList(actueleInzetmogelijkheden.get(2),actueleInzetmogelijkheden.get(3),actueleInzetmogelijkheden.get(1)));
RisicomatrixRegel line4 = new RisicomatrixRegel(Arrays.asList(actueleInzetmogelijkheden.get(3),actueleInzetmogelijkheden.get(1),actueleInzetmogelijkheden.get(1)));
RisicomatrixRegel line5 = new RisicomatrixRegel(Arrays.asList(actueleInzetmogelijkheden.get(1),actueleInzetmogelijkheden.get(1)));
data = Arrays.asList(line1,line2,line3,line4,line5);
}
public List<RisicomatrixRegel> getData() {
return data;
}
}
<h:outputText rendered="#{testBean.readOnly}"
value="#{line.inzetmogelijkhedenList[0].code}"/>
<h:selectOneMenu rendered="#{!testBean.readOnly}"
value="#{line.inzetmogelijkhedenList[0].code}" id="a1"
label="a1" disabled="#{testBean.locked}">
<f:selectItems value="#{testBean.inzetmogelijkhedenList}" var="b" itemLabel="#{b.omschrijving}"/>
</h:selectOneMenu>
另请参见:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。