使用ui:repeat创建selectBooleanCheckbox列表

时间:2015-11-13 16:22:28

标签: jsf primefaces

我怀疑使用php-fpm创建selectBooleanCheckbox

我有一个名为ui:repeat的班级,其中包括Filter

fields

所以我想知道是否可以使用class Filter { private Boolean comissaoAdesao; private Boolean comissaoSaque; private Boolean comissaoSaqueAdicional; private Boolean comissaoCompra; private Boolean cidadeUF; private Boolean publicidade; // getter e setter } 将字段链接到selectBooleanCheckbox

我的方法是:

ui:repeat

我的网页代码是:

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;

3 个答案:

答案 0 :(得分:4)

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

在当前模型中,您有一堆 fixed 布尔属性,而不是动态大小的数组或布尔属性的集合。 import iAd import UIKit import GameKit import SceneKit import StoreKit import SpriteKit import QuartzCore import Foundation import AVFoundation import AudioToolbox //============================================================ class MainMenuController: SKScene, ADBannerViewDelegate, SKPhysicsContactDelegate, SKSceneDelegate, SCNSceneRendererDelegate, SCNPhysicsContactDelegate{ override func didMoveToView(view: SKView) { } 只能迭代动态大小的数组或集合。在您的模型中,您事先已经知道所有可能的布尔属性。因此,您可以在视图中定义它们。从技术上讲,您根本不需要<ui:repeat>。您<ui:repeat>而不是value="#{someBoolean}"的初始尝试失败的原因与解释here的技术原因相同。

给出

的示例实体
value="#{bean.someBoolean}"

你可以这样做:

public class Filter {

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

    // ...
}

如果您担心非DRY代码,只需将此全部放入可重复使用的include file or perhaps even tagfile or composite中,并将<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> 作为值。

#{bean.filter}

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

<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']}" />

enum

您可以简单地将它们保存在数组或集合中(数组更容易,因此您不需要JSF转换器;如果您想在public enum FilterOption { OPTION1, OPTION2, OPTION3; } 上使用JPA @ElementCollection因此不能使用数组,请考虑OmniFaces GenericEnumConverter)。

@Enumerated

您可以在应用程序范围内提供所有可用值。

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>

<p:panelGrid><p:selectBooleanCheckbox>

另见:

答案 1 :(得分:1)

您的用例需要SelectManyCheckbox

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

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

如果需要,你甚至可以投入<ui:param name="campo" value="(what you want to do with item.value that I can't understand from your code)" /> ......

答案 2 :(得分:1)

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

<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<String, Boolean>。这对我有用,所以也适合你。

相关