如何在支持bean中设置h:commandButton的背景颜色

Ran*_*ith -2 jsf

我有一个命令按钮,当我点击它时,应该改变该按钮的背景颜色.这应该在backing bean方法中完成.如何在Java方法中设置命令按钮的颜色?我试过这个

if (dt.equals(getDate())) {
  System.out.println("Date is equal....");
  button.setBackground(Color.yellow);
}
else {
  System.out.println("date is different");
}
Run Code Online (Sandbox Code Playgroud)

但它显示错误

找不到方法设置Background(Java.awt.colour).

Bal*_*usC 6

你犯了一些概念上的错误.

  1. 你把JSF与Swing混淆了.
  2. 您正试图操纵控制器中的视图.

要了解JSF是什么,请从这里开始.要了解Swing是什么,请从这里开始.他们不一样.在使用JSF进行开发时,不要在Swing中思考或搜索Swing解决方案.

至于MVC方面,支持bean是控制器.它应该只操纵模型(bean的属性),而不是视图(XHTML文件).视图(XHTML文件)应该只通过控制器(托管bean实例)访问模型(bean的属性).

以下是正确的方法:

private boolean dateEqual;

public void someActionMethod() {
    dateEqual = dt.equals(date);
}

public boolean isDateEqual() {
    return dateEqual;
}
Run Code Online (Sandbox Code Playgroud)
<h:commandButton ... style="background: #{bean.dateEqual ? 'yellow' : 'none'}" />
Run Code Online (Sandbox Code Playgroud)

或者,如果您对两者dt和date属性都有getter方法,您甚至可以在没有附加属性的情况下离开:

<h:commandButton ... style="background: #{bean.dt eq bean.date ? 'yellow' : 'none'}" />
Run Code Online (Sandbox Code Playgroud)

请注意,style在HTML透视图中使用内联CSS via 属性是一种不好的做法.最好是创建一个表示特定条件的CSS类.例如"突出显示"(或特定条件具有的任何特定术语).

.highlight {
    background: yellow;
}
Run Code Online (Sandbox Code Playgroud)
<h:outputStylesheet name="style.css" />
...
<h:commandButton ... styleClass="#{bean.dateEqual ? 'highlight' : ''}" />
Run Code Online (Sandbox Code Playgroud)