跳至主要内容

JSF 2.3:Java Datetime Alignment

Java Datetime Alignment

JSF 2.3 add alignments with Java 8, including Java 8 Datetime APIs.
The f:convertDateTime supports the following Datetime types from Java 8.
  • LocalDate
  • LocalDateTime
  • LocalTime
  • OffsetTime
  • OffsetDateTime
  • ZonedDateTime
Let's write a simple sample to try it.
Create a backend bean.
@ViewScoped
@Named("dateTimeBean")
public class DateTimeBean implements Serializable {

    private static final Logger LOG = Logger.getLogger(DateTimeBean.class.getName());

    private LocalDate localDate = LocalDate.now();
    private LocalTime localTime = LocalTime.now();
    private LocalDateTime localDateTime = LocalDateTime.now();
    private OffsetTime offsetTime = OffsetTime.now();
    private OffsetDateTime offsetDateTime = OffsetDateTime.now();
    private ZonedDateTime zonedDateTime = ZonedDateTime.now();

    public LocalDate getLocalDate() {
        return localDate;
    }

    public void setLocalDate(LocalDate localDate) {
        this.localDate = localDate;
    }

    public LocalTime getLocalTime() {
        return localTime;
    }

    public void setLocalTime(LocalTime localTime) {
        this.localTime = localTime;
    }

    public LocalDateTime getLocalDateTime() {
        return localDateTime;
    }

    public void setLocalDateTime(LocalDateTime localDateTime) {
        this.localDateTime = localDateTime;
    }

    public OffsetTime getOffsetTime() {
        return offsetTime;
    }

    public void setOffsetTime(OffsetTime offsetTime) {
        this.offsetTime = offsetTime;
    }

    public OffsetDateTime getOffsetDateTime() {
        return offsetDateTime;
    }

    public void setOffsetDateTime(OffsetDateTime offsetDateTime) {
        this.offsetDateTime = offsetDateTime;
    }

    public ZonedDateTime getZonedDateTime() {
        return zonedDateTime;
    }

    public void setZonedDateTime(ZonedDateTime zonedDateTime) {
        this.zonedDateTime = zonedDateTime;
    }

    
}
Create a facelets template to accept input fields and render the values.
<h:panelGroup layout="block" id="messageFromInputBox">
 LocalDate is :: #{dateTimeBean.localDate} <br />
 LocalTime is :: #{dateTimeBean.localTime} <br />
 LocalDateTime is :: #{dateTimeBean.localDateTime} <br />
 OffsetTime is :: #{dateTimeBean.offsetTime} <br />
 OffsetDateTime is :: #{dateTimeBean.offsetDateTime} <br />
 ZonedDateTime is :: #{dateTimeBean.zonedDateTime} <br />
</h:panelGroup>
<h:form id="form">
 <div>
  <h:outputLabel for="localDate" value="LocalDate" />
  <h:inputText 
   id="localDate" 
   value="#{dateTimeBean.localDate}">
   <f:convertDateTime type="localDate"/>
  </h:inputText>    
 </div>
 <div>
  <h:outputLabel for="localTime" value="LocalTime" />
  <h:inputText 
   id="localTime" 
   value="#{dateTimeBean.localTime}">
   <f:convertDateTime type="localTime"/>
  </h:inputText>    
 </div>
 <div>
  <h:outputLabel for="localDateTime" value="LocalDateTime" />
  <h:inputText 
   id="localDateTime" 
   value="#{dateTimeBean.localDateTime}">
   <f:convertDateTime type="localDateTime"/>
  </h:inputText>    
 </div>
 
 <div>
  <h:outputLabel for="offsetTime" value="OffsetTime" />
  <h:inputText 
   id="offsetTime" 
   value="#{dateTimeBean.offsetTime}">
   <f:convertDateTime type="offsetTime"/>
  </h:inputText>    
 </div>
 
 <div>
  <h:outputLabel for="offsetDateTime" value="OffsetDateTime" />
  <h:inputText 
   id="offsetDateTime" 
   value="#{dateTimeBean.offsetDateTime}">
   <f:convertDateTime type="offsetDateTime"/>
  </h:inputText>    
 </div>
 
  <div>
  <h:outputLabel for="zonedDateTime" value="ZonedDateTime" />
  <h:inputText 
   id="zonedDateTime" 
   value="#{dateTimeBean.zonedDateTime}">
   <f:convertDateTime type="zonedDateTime"/>
  </h:inputText>    
 </div>
 
 <div>
  <h:commandButton 
   id="saveDateTime" 
   value="Save DateTime">
   <f:ajax execute="@form" render=":messageFromInputBox" />
  </h:commandButton>
 </div>
</h:form>
Run the project in NetBeans IDE, after it is deployed successfully, open your browser and navigate to http://localhost:8080/jsf-datetime.
JSF Java 8 DateTime
Grab the source codes from my github account, and have a try.

评论

此博客中的热门博文

Build a Reactive application with Angular 5 and Spring Boot 2.0

I have created a post to describe Reactive programming supports in Spring 5 and its subprojects, all codes of this article are updated the latest Spring 5 RELEASE, check spring-reactive-sample under my Github account.
In this post, I will create a simple blog system, including:
A user can sign in and sign out.An authenticated user can create a post.An authenticated user can update a post.Only the user who has ADMIN role can delete a post.All users(including anonymous users) can view post list and post details.An authenticated user can add his comments to a certain post. The backend will be built with the latest Spring 5 reactive stack, including:
Spring Boot 2.0, at the moment the latest version is 2.0.0.M7Spring Data MongoDB supports reactive operations for MongoDBSpring Session adds reactive support for WebSessionSpring Security 5 aligns with Spring 5 reactive stack The frontend is an Angular based SPA and it will be generated by Angular CLI.
The source code is hosted on Github, …

Activating CDI in JSF 2.3

Activating CDI in JSF 2.3 When I upgraed my Java EE 7 sample to the newest Java EE 8, the first thing confused me is the CDI beans are not recoganized in Facelects template in a JSF 2.3 based web applicaiton, which is working in the development version, but in the final release version, they are always resolved as null. I filed an issue on Mojarra and discussed it with the developers from communities and the JSF experts.
According to the content of README, In a JSF 2.3 application, to activate CDI support, declaring a 2.3 versioned faces-config.xml and adding javax.faces.ENABLE_CDI_RESOLVER_CHAIN in web.xml is not enough, you have to declare @FacesConfig annotated class to enable CDI.
Here is the steps I created a workable JSF 2.3 applicatoin in Java EE 8.
Create a Java web application, this can be done easily by NetBeans IDE, or generated by Maven archetype, for exmaple.
$ mvn archetype:generate -DgroupId=com.example -DartifactId=demo -DarchetypeArtifactId=maven-archetype-w…

JSF 2.3:Websocket support

Websocket support One of the most attractive features is JSF 2.3 added native websocket support, it means you can write real-time applications with JSF and no need extra effort.
To enable websocket support, you have to add javax.faces.ENABLE_WEBSOCKET_ENDPOINT in web.xml.
<context-param> <param-name>javax.faces.ENABLE_WEBSOCKET_ENDPOINT</param-name> <param-value>true</param-value> </context-param> Hello Websocket Let's start with a simple example.
@ViewScoped@Named("helloBean") publicclassHelloBeanimplementsSerializable { privatestaticfinalLoggerLOG=Logger.getLogger(HelloBean.class.getName()); @Inject@PushPushContext helloChannel; String message; publicvoidsendMessage() { LOG.log(Level.INFO, "send push message"); this.sendPushMessage("hello"); } privatevoidsendPushMessage(Objectmessage) { helloChannel.send(""+ message +" at &…