我正在使用JSF
和Primefaces
。我想根据条件显示具有不同背景颜色的datatable
的一些行。这种情况是,如果date()大于或等于当前日期,则必须使用CSS文件中指定的颜色显示行。如何获得当前日期?
这是Facelet
<p:dataTable id="dataTableCitizens" rowStyleClass="#{item.dateLastDate ge currentDate ? 'colored' : null}" value="#{citizensManagedBean.listCitizens}" var="item">
这是CSS
.colored {
background-color: yellow;
}
我在WEB-INF中创建了一个faces-config.xml文件,代码如下:
<?xml version='1.0' encoding='UTF-8'?>
<faces-config version="2.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd">
<managed-bean>
<managed-bean-name>currentDate</managed-bean-name>
<managed-bean-class>java.util.Date</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
,但是当我运行Web应用程序时,它给了我一个java.lang.NullPointerException。 我做错了什么?
答案 0 :(得分:1)
最基本的解决方案是在bean中创建一个变量并使用@PostConstruct
注释启动它:
private Date currentDate;
@PostConstruct
public void init() {
currentDate = new Date();
}
//Getter and Setters...
然后您可以在视图中访问它:#{yourBean.currentDate}
或者你可以使用Omnifaces&#39;默认实现#{now}
。
答案 1 :(得分:0)
Thrax的建议是对的,但并不完整。 如果您想使用Primefaces或JSF获取日期,则必须设置如下代码:
首先,我们将创建一个java类,并调用currentDate或getMyDate,无论您如何命名它。然后粘贴Thrax构造。另外,您必须将@ManagedBean upper添加到您的课程中。
我们添加ManagedBean以便在JSF中将其称为类。 现在,如果你去你的JSF并输入#{curr ....}(ctrl + space),你将能够看到你的类是一个bean,但是当你尝试调用属性currentDate时它就不会出现了。所以你需要做的就是创建Get和Set方法。 最后,您将在init构造函数中调用SetCurrentDate方法,为其提供变量currentDate作为参数,就是这样。你只需要在你需要的JSF中再次调用这个属性,这次它会出现,它将显示在你的页面中。
这个课你看起来像这样