Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >设置p:selectManyCheckbox的每个单独复选框的背景色

设置p:selectManyCheckbox的每个单独复选框的背景色
EN

Stack Overflow用户
提问于 2012-09-13 23:32:05
回答 4查看 10K关注 0票数 9

我使用这个http://www.primefaces.org/showcase-labs/ui/selectManyCheckbox.jsf primefaces组件来获得动态booleanCheckboxes值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<p:selectManyCheckbox value="#{bean.selectedMovies}"  
            layout="pageDirection">  
            <f:selectItems value="#{bean.movies}" />  
        </p:selectManyCheckbox> 

我需要将不同的颜色应用于所有布尔复选框,如下图所示

如果是id=1,那么颜色将是红色,如果是id=2,那么颜色将是橙色等等。

正如我们所知道的,这些是电影中的动态值,那么我如何从bean中为这些动态复选框设置背景颜色呢?

我尝试将样式应用于selectManyCheckbox,但它作为背景色应用于整个selectManyCheckbox面板。

那么,我应该如何动态地将支持bean的颜色设置为selectManyCheckbox值呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-09-23 10:04:53

可以用纯CSS3完成

取决于你的实际需求。假设最终复选框的html结构与链接到的示例中的默认结构相同,那么以下是实现该结构的纯css3方式。

请注意,此方法并不具体地将颜色绑定到特定的电影/id,它总是将第一部电影设置为红色,第二部设置为橙色,等等。它还有一个实际的限制。如果您计划列出100部电影,每一部都有一个独特的颜色,那么这是而不是的方法。

但是,如果你列出一个小集(10max?),或者你不介意,如果颜色在一个小样本后重复,那么这很可能是你最好的选择。

Here's a fiddle showing both of the following

小集

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.ui-selectmanycheckbox tr:nth-of-type(1) .ui-state-default {
    background-color: red;
}

.ui-selectmanycheckbox tr:nth-of-type(2) .ui-state-default {
    background-color: orange;
}

.ui-selectmanycheckbox tr:nth-of-type(3) .ui-state-default {
    background-color: red;
}

.ui-selectmanycheckbox tr:nth-of-type(4) .ui-state-default {
    background-color: orange;
}

重复四色

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.ui-selectmanycheckbox tr:nth-of-type(4n+1) .ui-state-default {
    background-color: red;
}

.ui-selectmanycheckbox tr:nth-of-type(4n+2) .ui-state-default {
    background-color: orange;
}

.ui-selectmanycheckbox tr:nth-of-type(4n+3) .ui-state-default {
    background-color: green;
}

.ui-selectmanycheckbox tr:nth-of-type(4n+4) .ui-state-default {
    background-color: blue;
}
票数 4
EN

Stack Overflow用户

发布于 2012-09-17 05:36:42

这在标准的<p:selectManyCheckbox>中是不可能的,至少在这种动态环境下是不可能的。如果是静态值,则只需使用CSS3 nth-child()选择器即可。对于<p:selectManyCheckbox>中的动态值,您基本上需要覆盖它的呈现器(这不是一项简单的工作),或者发布一个特性请求(这可能需要比您想要的更长的时间)。

您的最佳选择是使用<ui:repeat><h:dataTable>,其中您在每一行的基础上呈现单个<p:selectBooleanCheckbox>。这允许您在每个复选框的基础上指定一个styleClass。这还需要对selectedMovies属性的填充方式进行技术上的更改。

下面是<h:dataTable>的一个具体的启动示例(注意:<p:selectManyCheckbox>本身也生成一个<table>,所以布局--从技术上讲,没有太大的区别,如果表在语义上困扰您,您可以选择<ui:repeat> ):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<h:dataTable value="#{bean.movies}" var="movie" styleClass="ui-selectmanycheckbox ui-widget">
    <h:column>
        <p:selectBooleanCheckbox id="checkbox" converter="javax.faces.Boolean"
            value="#{bean.checkedMovieIds[movie.id]}" styleClass="#{movie.type}" />
    </h:column>
    <h:column>
        <p:outputLabel for="checkbox" value="#{movie.title}" />
    </h:column>
</h:dataTable>

<p:commandButton value="Submit" actionListener="#{bean.collectMovies}" action="#{bean.submit}" />

备注

  • <h:dataTable styleClass>使用与<p:selectManyCheckbox>完全相同的CSS,因此复选框表看起来‘n’感觉完全相同。
  • converter="javax.faces.Boolean"是强制性的(实际上,让我感到惊讶),因为否则它会将选中的值truefalse设置为String而不是Boolean;在<h:selectBooleanCheckbox>中不存在这个问题,可能是PF错误吗?
  • 在这个特定的用例中,styleClass="#{movie.type}"styleClass="#{movie.id}"更有意义,因为为每个单独的"id“值指定一个单独的样式类似乎是一项荒谬的任务,它通常代表一个唯一的自动分配的DB标识符;如果需要,可以在实际代码中对其进行更改。
  • actionListener在实际的action方法之前完成收集selectedMovies的工作。当然,您也可以在实际的action方法中完成这项工作,但是这样就不再那么清晰地分开了。

后台bean如下所示( checkedMovieIds假设Movie有一个Long id属性):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private List<Movie> movies;
private Map<Long, Boolean> checkedMovieIds;
private List<Movie> selectedMovies;

@PostConstruct
public void init() {
    movies = populateItSomehow();
    checkedMovieIds = new HashMap<Long, Boolean>();
}

public void collectMovies(ActionEvent event) {
    selectedMovies = new ArrayList<Movie>();
    for (Movie movie : movies) {
        if (checkedMovieIds.get(movie.getId())) {
            selectedMovies.add(movie);
        }
    }
}

public void submit() {
    System.out.println(selectedMovies);
    // ...
}

// +getters (note: no setters necessary for all those three properties)

假设#{movie.type}可以具有actioncomedyfantasyhorror值(顺便说一句,它是一个完美的enum类型候选),那么您可以将单个复选框的样式设置为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.action .ui-chkbox-box {
    background-color: red;
}

.comedy .ui-chkbox-box {
    background-color: orange;
}

.fantasy .ui-chkbox-box {
    background-color: green;
}

.horror .ui-chkbox-box {
    background-color: blue;
}
票数 4
EN

Stack Overflow用户

发布于 2012-09-17 12:06:34

我知道这个解决方案有点麻烦,但它有效:)

Xhtml文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<p:selectManyCheckbox binding="#{requestScope.movieSelect}" layout="pageDirection">
    <f:selectItems value="#{bean.movies}" />
</p:selectManyCheckbox>

<script>
(function() {
    var selectName = '#{requestScope.movieSelect.clientId}';
    var kids = jQuery("input[id*="+selectName+"]");
    var index = 0;

    <ui:repeat value="#{bean.movies}" var="movie">
        jQuery(kids[index++]).parent().next().css('background-color', '#{movie.description}');
    </ui:repeat>
}());
</script>

支持豆:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Bean {

    private List<SelectItem> movies = Arrays.asList(
            new SelectItem("Scarface", "Scarface", "green"),
            new SelectItem("Goodfellas", "Goodfellas", "red"),
            new SelectItem("Godfather", "Godfather", "blue"),
            new SelectItem("Carlito's Way", "Carlito's Way", "yellow"));

    public List<SelectItem> getMovies() {
        return movies;
    }
}

Css文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.ui-chkbox-box {
    background-image : none;
}

附注:css文件可能不是必需的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12420004

复制
相关文章
Qml引用Loader组件属性
  本例子使用Loader加载myComponent组件,然后通过Loader的item属性设置myComponent的value属性。
Qt君
2023/03/17
8540
Qml引用Loader组件属性
Qml属性绑定小误区
  下面代码中,Text对象绑定了car.wheels属性。当onCompleted执行完成时,car.wheels = 6也同样执行完成了。预想结果是Text对象会动态更新,但实际上是不会更新的。
Qt君
2023/03/17
5630
Qml属性绑定小误区
从javascript脚本混淆说起
脚本病毒是一个一直以来就存在,且长期活跃着的一种与PE病毒完全不同的一类病毒类型,其制作的门槛低、混淆加密方式的千变万化,容易传播、容易躲避检测,不为广大网民熟知等诸多特性,都深深吸引着各色各样的恶意软件制作者 … 小到一个不起眼的lnk快捷方式,大到一个word文档,都是脚本的载体。本文主要以 js脚本为例(特指JScript,下同 ),具体结合实际样本,讲述混淆方式及其混淆类型检测相关知识,文章受限于样本个数及其种类,存在一定的局限性,但大致情况应当不会相差太大。本系列首先会对jscript及其脚本进行
FB客服
2018/02/28
1.5K0
从javascript脚本混淆说起
javascript脚本编辑错误集(持续更新)
Each child in a list should have a unique “key” prop Dom在渲染数组时,需要一个key,不然嵌套数组时会引起歧义 <div className="classlist-contaier"> {this.state.classList.map((item, index) => { return <ClassItem key={index}/>; })} </div> validateDOMNesting(…):
sofu456
2021/02/02
6460
Qml好用的default附加属性
  看似很没用的属性却说有用,还说好用。第一个例子看起来和常规做法差不多。那么我们看看第二个例子使用起来是如何好用的。   Group.qml组件:
Qt君
2019/07/15
1.6K0
Qml好用的default附加属性
Qml属性implicitWidth/Height与width/height区别
  implicitWidth/Height一般用在可重用控件,它也不是必要的,QtQuick可以没有者两个属性,只因为了方便而存在。qt例子描述到什么情况下用到implicitWidth/height属性,就是Image。它提供了项目的自然大小的提示,但没有强制执行此大小。图像的自然尺寸将图像文件中的一个像素映射到屏幕上的一个像素。但它允许我们拉伸它,因此大小不会被强制执行并且可以被覆盖。另外有些控件直接设置width/height会造成性能损失(Text,TextEdit).
Qt君
2019/07/15
1.7K0
QML教程-属性绑定与赋值
写QML界面会经常使用到很多的属性,其中属性的绑定与解绑尤其重要,决定着该界面属性是否能动态更新的功能。本文介绍属性的绑定与非绑定特性。 1.属性绑定 使用 :操作符,作用是左值绑定右值。 例: Item { property color myColor: "white" ... Rectangle { color: myColor ... } } color绑定父控件 myColor属性。 2.属性非绑定(解除绑定) 使用 =操作符,作用是左值解除右值绑定 例: Item {
Qt君
2019/07/15
2.1K0
如何从JavaScript对象中删除属性?
在使用 JavaScript 中的对象时,你可能会遇到需要从对象中完全删除属性的情况。为实现这一点可以有好几个选择:
疯狂的技术宅
2021/04/01
12.4K0
从网络导入Qml控件
先看一个小例子: import QtQuick 2.0 import "http://example.com/QtCompoment/" Rectangle { Button { } Label { } CheckBox { } } 步骤: example.com网站点根目录下存在一个QtComponent文件夹。 QtComponent文件夹里面包含以下文件: qmldir Button.qml Label.qml CheckBox.qml qmldir文件需要有以下内容描述
Qt君
2023/03/17
4090
从网络导入Qml控件
shell脚本实际运用_shell脚本调用另一个脚本
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/168438.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/22
9980
git更新脚本
说明 此脚本用于更新git仓库,主要用于使用ssh克隆的仓库,使用https克隆或者直接下载的不可使用此脚本进行更新,编写此贴用于保存脚本以供后用 Linux平台 Linux平台下的脚本使用的是bash shell脚本进行编写的 #! /bin/bash ######################################## #Usage: ./update comment "msg" ######################################## echo st
impressionyang
2021/05/06
8120
用一个属性代理另一个对象的属性
今天来分享给大家一个属性代理的例子。总是有人问我属性代理有什么用,这个也许可以为你提供些思路。
bennyhuo
2020/02/20
8840
翻译 | QML编码约定
如果列表对象仅包含一个元素,则通常会省略方括号。例如,一个组件仅具有一个状态是很常见的。在这种情况下,如果这样写:
Qt君
2020/02/14
9400
JavaScript之firstChild属性、lastChild属性、nodeValue属性学习
1.数组元素childNodes[0]有更直观易读的优点,这边在介绍一个有同样功能的属性,且更加语义化-------->firstChild属性 假设我们需要目标元素节点下的所有子元素中的第一个子元素我们可以这样做: 目标元素节点下的子元素节点数组.firstChild 这句代码等价于 目标元素节点下的子元素节点数组[0]; 目标元素节点.childNodes[0] 这句代码等价于 目标元素节点.firstChild; 与此类推当我们需要目标元素节点下的所有子元素节点中的最后一个元素我们可以这样做: 目标
郑小超.
2018/01/24
1.7K0
JavaScript之childNodes属性、nodeType属性学习
1.childNodes属性:在一颗节点树上,childNodes属性可以用来获取任何一个元素的所有元素,它是一个包含这个元素所有子元素的数组。 <body> <script type="text/javascript"> function countBodyChildren() { var allelements = document.getElementsByTagName("body"); aler
郑小超.
2018/01/24
1.1K0
JavaScript数据属性和访问器属性
看《深入理解JavaScript》的this篇时看到“访问器属性”这个不熟悉的名词,百度后找到两篇感觉比较合适的文章,整合记录一下,以参考资料2为主,参考资料1为辅助补充。
WindCoder
2018/09/20
1.6K0
Three.js入门
Three.js 是一款运行在浏览器中的 3D 引擎,你可以用它创建各种三维场景,包括了摄影机、光影、材质等各种对象。你可以在它的主页上看到许多精采的演示。Three.js是一个伟大的开源WebGL库,WebGL允许JavaScript操作GPU,在浏览器端实现真正意义的3D。 Three.js的核心五步就是: 1.设置three.js渲染器 2.设置摄像机camera 3.设置场景scene 4.设置光源light 5.设置物体object 1.设置three.js渲染器 三维空间里的物体映射到二维平面的
李海彬
2018/03/22
7.8K0
JavaScript——对象的属性
在JavaScript中,所有的对象都是一组属性的集合,属性可以是数值,字符串等原始类型,也可以是函数,或者是其他对象。
Html5知典
2019/11/26
2.5K0
JavaScript实现私有属性
JavaScript被很多人认为并不是一种面向对象语言,原因有很多种,比如JavaScript没有类,不能提供传统的类式继承;再比如JavaScript不能实现信息的隐藏,不能实现私有成员。本文并不是为了打破以上误解(实际上笔者自己也有困惑),只是简单介绍几种JavaScript实现私有属性的方式,以及各自的优劣。 1. 基于编码规范约定实现方式 很多编码规范把以下划线_开头的变量约定为私有成员,便于同团队开发人员的协同工作。实现方式如下: function Person(name){ this._na
寒月十八
2018/01/30
9700
javascript的NaN属性
NaN 属性是代表非数字值的特殊值。该属性用于指示某个值不是数字。可以把 Number 对象设置为该值,来指示其不是数字值。
OECOM
2020/07/01
1.1K0

相似问题

从另一个QML设置QML属性

11

如何从函数内部更新QML属性

19

不更新属性别名的QML Javascript字典

11

QML从另一个QML对象访问附加属性

13

从C++更新QML窗口属性标志

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文