带有selectOneListbox的JSF数据表
我有一个列出一些对象的数据表,我想使用selectOneListbox为这些对象设置一个属性。这是我的数据表带有selectOneListbox的JSF数据表,jsf,datatable,Jsf,Datatable,我有一个列出一些对象的数据表,我想使用selectOneListbox为这些对象设置一个属性。这是我的数据表 <h:dataTable value="#{someHandler.entities}" binding="#{someHandler.dataTable}" var="entitiy"> <h:column> <f:facet name="header"&
<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>
(dataTable是一个HtmlDataTable对象。)
但是,无论selectOneListbox位于哪一行,事件对象始终是相同的。(似乎总是第一行的记录器)。我得到的记录器对象也不是我想要的
有什么想法吗?谢谢大家!
还有其他问题吗?即使我有一个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 impl/版本),您可以使用
标记,而无需使用带有hackyonchange=“submit()”
的valueChangeListener
其次,您需要确保datatable值
{someHandler.entities}
在提交期间返回的列表与初始请求期间的列表完全相同。因此,在bean(post)构造函数中加载数据。在JSF2.x中,您还希望将bean放在视图范围中
与具体问题无关,您也可以使用
而不是
谢谢您,巴卢斯克,我已经从您那里学到了很多!但有一个问题:实际上,我希望使用通过调用某个第三方类获得的值预设entity.level。每一行都应该显示当前级别(这就是为什么我不想在每一行中显示“-”),如果我更改该列表框的值,级别应该更改(仅针对该行)。我将看看我能用ajax做些什么。
<f:selectItem itemValue="#{null}" itemLabel="-" />