我对使用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>
您的代码有点奇怪,请检查这是否符合您的要求:
<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
相关的
从内部推送一个值
您的用例需要一个SelectManyCheckbox
查看您的代码,您可以这样使用它:
<p:selectManyCheckbox id="basic" value="#{yourBean.selectedCheckboxes}">
<f:selectItems value="#{yourBean.colunaAnalitico}" var="item" itemLabel="#{item.key}" itemValue="#{item.value}" />
</p:selectManyCheckbox>
你甚至可以加入一个
简单来说:视图必须与模型匹配。
在当前模型中,您有一组固定的布尔属性,而不是动态大小的数组或布尔属性的集合。<代码>
给出了一个实体的示例
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']}" />
从另一方面来看,模型很可能设计得很糟糕。一堆固定布尔函数中最直接的重构方法是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表组件,它使用