gpt4 book ai didi

带有 selectOneListbox 的 JSF 数据表

转载 作者:行者123 更新时间:2023-12-04 06:26:46 25 4
gpt4 key购买 nike

我有一个列出一些对象的数据表,我想使用 selectOneListbox 为这些对象设置一个属性。这是我的数据表

<h:dataTable value="#{someHandler.entities}"
binding="#{someHandler.dataTable}" var="entitiy">
<h:column>
<f:facet name="header">
<t:outputText value="Level" />
</f:facet>
<h:selectOneListbox id="level" value="#{entitiy.level}" size="1"
valueChangeListener="#{someHandler.changeLevel}"
onchange="submit()">
<f:selectItem itemValue="-" itemLabel="-" />
<f:selectItem itemValue="ALL" itemLabel="ALL" />
(and so on)
</h:selectOneListbox>
</h:column>
<h:column>
<f:facet name="header">
<t:outputText value="Name" />
</f:facet>
<h:outputText value="#{entitiy.name}" />
</h:column>
</h:dataTable>

valueChangeListener 看起来像这样:
public void changeLevel(ValueChangeEvent event) {
String newLevel = (String) event.getNewValue();
Logger logger = (Logger) dataTable.getRowData();
logger.setLevel(Level.toLevel(newLevel));
}

(dataTable 是一个 HtmlDataTable 对象。)

然而,事件对象总是相同的——无论 selectOneListbox 在哪一行。(似乎总是记录器在第一行)。我得到的 Logger 对象也不是我想要的。

有任何想法吗?谢谢!

还有其他人的问题?即使我有 valueChangeListener 是否调用了 entitiy.setLevel() 方法?我使用 entitiy.level 是因为我想将所选级别显示为这些实体的默认级别。

谢谢!

最佳答案

这里有两个潜在的问题:

一、onchange="submit()"提交 整个形式。 valueChangeListener将在 上调用全部 提交值与初始值不同的输入元素。

您需要预设#{entitiy.level}后面的值与默认菜单选项的值相同。例如。在构造函数中。

public Entity() {
level = "-";
}

或者,更好的是设置默认值 null .
<f:selectItem itemValue="#{null}" itemLabel="-" />

使 valueChangeListener当特定菜单未更改时不会被调用。

或者,当您已经使用 JSF 2.x(请始终在您的 JSF 问题中提及确切的 JSF 实现/版本)时,您可以使用 <f:ajax>无需使用 valueChangeListener 即可标记此内容与黑客 onchange="submit()" .

其次,需要确保数据表值 #{someHandler.entities}返回 正好提交期间的列表与初始请求期间的列表相同。因此,在 bean (post) 构造函数中进行数据加载。在 JSF 2.x 中,您还希望将 bean 放在 View 范围内。

无关 对于具体问题,您也可以使用 <h:selectOneMenu>而不是 <h:selectOneListbox size="1"> .

关于带有 selectOneListbox 的 JSF 数据表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5952547/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com