当前位置: 首页 > 知识库问答 >
问题:

使用ui:repeat创建selectBooleanCheckbox列表

松和璧
2023-03-14

我对使用ui:repeat创建selectBooleanCheckbox有一个疑问。

我有一个名为Filter的类,其中包含字段

class Filter {

    private Boolean comissaoAdesao;
    private Boolean comissaoSaque;
    private Boolean comissaoSaqueAdicional;
    private Boolean comissaoCompra;
    private Boolean cidadeUF;
    private Boolean publicidade;

    // getter e setter
}

因此,我想知道是否可以使用ui:repeat将字段链接到selectbooleanchexbox

我的方法是:

if (NullUtil.isNull(this.colunasAnalitico)) {
    Map<String, Boolean> map = new TreeMap<String, Boolean>() {
        {
            put("Comissão adesão", filter.getComissaoAdesao());
            put("Comissão saque", filter.getComissaoSaque());
            put("Comissão saque adicional", filter.getComissaoSaqueAdicional());
            put("Comissão compra", filter.getComissaoCompra());
            put("Cidade/UF", filter.getCidadeUF());
            put("Publicidade", filter.getPublicidade());
        }
    };
    this.colunasAnalitico = new ArrayList<Entry<String, Boolean>>(map.entrySet());
}
return colunasAnalitico;

我的页面代码是:

<ui:repeat >
    <p:row>
        <c:set var="campo" value="bean.filter.#{colunaAnalitico.value}"/>
        <p:column style="width: 2%">
            <p:selectBooleanCheckbox label="#{colunaAnalitico.key}" value="#{campo}"/>
        </p:column>
        <p:column>
            <p:outputLabel value="#{campo}"/>
        </p:column>                         
    </p:row>
</ui:repeat>

共有3个答案

何辰沛
2023-03-14

您的代码有点奇怪,请检查这是否符合您的要求:

<ui:repeat value="#{bean.map.entrySet().toArray()}" var="entry" >
    <p:row>
        <p:column style="width: 2%">
            <p:selectBooleanCheckbox label="#{entry.key}" value="#{bean.map[entry.key]}"/>
        </p:column>
        <p:column>
            <p:outputLabel value="#{entry.key}"/>
        </p:column>                         
    </p:row>
</ui:repeat>

bean是您的后盾bean,而map可能是TreeMap

相关的

  • 从内部推送一个值

匡旭东
2023-03-14

您的用例需要一个SelectManyCheckbox

查看您的代码,您可以这样使用它:

<p:selectManyCheckbox id="basic" value="#{yourBean.selectedCheckboxes}">
    <f:selectItems value="#{yourBean.colunaAnalitico}" var="item" itemLabel="#{item.key}" itemValue="#{item.value}" />
</p:selectManyCheckbox>

你甚至可以加入一个

湛文乐
2023-03-14

简单来说:视图必须与模型匹配。

在当前模型中,您有一组固定的布尔属性,而不是动态大小的数组或布尔属性的集合。<代码>

给出了一个实体的示例

public class Filter {

    private Boolean option1;
    private Boolean option2;
    private Boolean option3;

    // ...
}

你可以这样做:

<p:panelGrid columns="2">
    <p:selectBooleanCheckbox id="option1" value="#{bean.filter.option1}" />
    <p:outputLabel for="option1" value="Filter option one" />

    <p:selectBooleanCheckbox id="option2" value="#{bean.filter.option2}" />
    <p:outputLabel for="option2" value="Filter option two" />

    <p:selectBooleanCheckbox id="option3" value="#{bean.filter.option3}" />
    <p:outputLabel for="option3" value="Filter option three" />
</p:panelGrid>

如果您担心非DRY代码,只需将这些都放在可重用的包含文件中,或者甚至可以将#{bean.filter}作为值的tagfile或复合文件中。

<my:selectFilterOptions value="#{bean.filter}" />

如果出于某种原因担心标签值,您需要意识到它们根本不属于模型。它们属于视图,或者至少属于资源束属性文件。

filter_option.option1 = Filter option one
filter_option.option2 = Filter option two
filter_option.option3 = Filter option three
<p:outputLabel for="option1" value="#{i18n['filter_option.option1']}" />
...
<p:outputLabel for="option2" value="#{i18n['filter_option.option2']}" />
...
<p:outputLabel for="option3" value="#{i18n['filter_option.option3']}" />
  • JSF中的国际化,何时使用消息包和资源包

从另一方面来看,模型很可能设计得很糟糕。一堆固定布尔函数中最直接的重构方法是enum

public enum FilterOption {

    OPTION1,
    OPTION2,
    OPTION3;

}

您可以简单地将它们保存在数组或集合中(数组更容易,所以您不需要JSF转换器;如果您想在@枚举上使用JPA@ElementCollection,因此无法使用数组,请考虑OmniFacesGenericENumConzer)。

public class Filter {

    private FilterOption[] options;

    // ...
}

您可以提供应用程序范围中的所有可用值。

@Named
@ApplicationScoped
public class Data {

    public FilterOption[] getFilterOptions() {
        return FilterOption.values();
    }

}

可以使用枚举名称作为键来本地化资源束属性文件中的标签。

filter_option.OPTION1 = Filter option one
filter_option.OPTION2 = Filter option two
filter_option.OPTION3 = Filter option three

因此,您最终可以使用

<p:selectManyCheckbox value="#{bean.filter.options}">
    <f:selectItems value="#{data.filterOptions}" var="option"
        itemValue="#{option}" itemLabel="#{i18n['filter_option.' += option]}" />
</p:selectManyCheckbox>
  • 如何在f中使用枚举值:selectItem(s)
  • 在h中使用枚举:选择manycheckbox
  • 如何让selectManyCheckBox返回列表以外的内容

 类似资料:
  • 主要内容:实例以下代码显示了如何使用创建表。 打开NetBeans,创建一个名称为:UIRepeat 的Web项目,其结构如下所示 - 实例 以下是文件: 文件中的代码 - 以下是文件: 文件中的代码 - 运行项目 在UIRepeat 项目上点击右键,选择 【运行】,在Tomcat启动完成后,打开浏览器访问以下地址: 如果程序没有错误,应该会看到如下界面 -

  • 我有一个很大的数据集,其中有许多带有状态的列。我想做一个新的专栏,有参与者的当前状态。我试图在dplyr中使用case_when,但我不确定如何跨列。数据集的列太多,我无法键入每一列。以下是数据示例: 对于代码,我想要一个新的列,列中说明参与者的最终状态;然而,如果他们的状态曾经是完成的,那么我希望它说完成,不管他们的最终状态是什么。对于该数据,答案如下所示: 还有,如果你能包括对你的代码的任何解

  • 假设我有以下数据帧: 我想创建一个基于列a的新列,并根据列a的值创建组。 我怎么能使用assign做同样的事情呢?

  • 我期待城市列表中的城市名单基于代码的输入。 请求你的协助。

  • 问题内容: 我需要创建一个视图,该视图具有一个名为row_num的列,将在其中插入行号,就像在普通表中自动递增一样。 假设我有这个普通表: 等等… 我要创建的视图是: 等等… 我可以通过一次选择生成row_num: 但是我的问题是将上面的查询与创建视图的查询结合起来。这是我正在尝试的组合查询: 我收到以下错误:#1351-视图的SELECT包含变量或参数 我知道我不能在带有视图的选择内使用选择,但

  • 我们为我们的项目创建了一个JSF表组件,它使用