gpt4 book ai didi

jsf - 如何使用h :selectOneRadio in h:dataTable to select single row?

转载 作者:行者123 更新时间:2023-12-02 17:27:22 27 4
gpt4 key购买 nike

我在表格中显示了页面列表。每个页面都有属性 homePage我希望在数据表中有一列单选按钮绑定(bind)到此属性上,并且用户只能检查一个值。如何在服务器端获取这个值?

我看到了一些如下的例子: http://jforum.icesoft.org/JForum/posts/list/14157.page ,但我想知道在这种情况下最好的做法是什么。

最佳答案

根据JSF spec issue 329我终于在 JSF 2.3 中实现了它。随着新的group属性,您现在可以在转发器组件中对单选按钮进行分组。

<h:dataTable value="#{bean.items}" var="item">
<h:column>
<h:selectOneRadio group="foo" value="#{bean.selectedItem}">
<f:selectItem itemValue="#{item}" />
</h:selectOneRadio>
</h:column>
</h:dataTable>

它将按照 Mojarra 2.3.0-m07 提供。

<小时/>

在 JSF 2.3 之前,这对于标准 JSF 来说并不是小事 <h:selectOneRadio> 。基本上,每行中的单选按钮都需要使用相同的输入 name 彼此分组。这样,每当您选择一个单选按钮时,其他单选按钮就不会被选中。但他们并没有被分组,他们都有自己的name ,因此其他单选按钮永远不会被取消选中。

像 PrimeFaces 这样的组件库已经通过提供特殊的属性或列组件解决了这个问题。另请参阅this showcase example它使用 <p:column selectionMode="single">生成单个选择列。所选值由 selection 引用<p:dataTable> 的属性。如果您已经在使用组件库并且它已经为您提供了这样的组件,那么您应该使用它。

在标准 JSF <h:dataTable> 中与 <h:selectOneRadio>您需要引入如下 JavaScript 解决方法,以取消选中同一列中的所有其他单选按钮:

<h:dataTable value="#{bean.items}" var="item">
<h:column>
<h:selectOneRadio valueChangeListener="#{bean.setSelectedItem}"
onclick="dataTableSelectOneRadio(this);">
<f:selectItem itemValue="null" />
</h:selectOneRadio>
</h:column>
...
</h:dataTable>

public void setSelectedItem(ValueChangeEvent event) {
FacesContext context = FacesContext.getCurrentInstance();
selectedItem = context.getApplication().evaluateExpressionGet(context, "#{item}", Item.class);
}

function dataTableSelectOneRadio(radio) {
var radioId = radio.name.substring(radio.name.lastIndexOf(':'));

for (var i = 0; i < radio.form.elements.length; i++) {
var element = radio.form.elements[i];

if (element.name.substring(element.name.lastIndexOf(':')) == radioId) {
element.checked = false;
}
}

radio.checked = true;
}

关于jsf - 如何使用h :selectOneRadio in h:dataTable to select single row?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10969204/

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