facelets
MVC 1.0是一个基于动作的Model-View-Controller Web框架,它将成为将来的Java EE 8的一部分。它将与基于组件的JSF框架并存,并提供了构建面向HTML + javascript的应用程序的替代方法完全控制网址。
这篇文章总结了使用Facelets代替默认的JSP作为MVC框架的视图技术需要做什么。
介绍
尽管MVC是一个全新的框架,但大多数示例中使用的默认视图技术(JSP)相当古老,有时会很麻烦。 另一方面,哥哥JSF已经建立在更现代,更灵活的Facelets上。
幸运的是,MVC框架旨在支持现成的许多替代视图技术,包括Facelets。
入门
尽管Java EE 8尚未发布,但是可以在某些Java EE 7服务器中使用MVC框架,因为名为Ozark的MVC规范的参考实现已经几乎完成。
据报道,Ozark与应用服务器Glassfish 4.1.1和Payara 4.1一起使用 。 我建议在其中一个应用程序上运行该应用程序,否则您可能会四处走动。
在发布Java EE 8之前,有必要使用Java EE 7 API之上的默认范围compile
功能来添加对ozark maven工件的依赖关系:
pom.xml中的依赖项
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.glassfish.ozark</groupId>
<artifactId>ozark</artifactId>
<version>1.0.0-m02</version>
<scope>compile</scope>
</dependency>
这就是设置项目所需要的。 现在,您可以将新的MVC框架与Java EE结合使用了!
控制者
MVC框架基于JAX-RS构建,并与CDI和Bean验证集成。 因此,MVC Controller是一个JAX-RS资源,仅使用@javax.mvc.annotation.Controller
了注释:
HeloController.java
@Path("/hello")
@Controller
@RequestScoped
public class HelloController {
@Inject
private Models model;
@GET
public String doGet() {
model.put("hello", "Hello MVC 1.0");
return "hello.xhtml";
}
}
控制器包含业务逻辑,并将模型粘贴到视图上。
该视图仅由控制器操作返回的字符串标识。 要使用facelets,只需指定一个路径即可,该路径将被映射到Facelets servlet(按照惯例,我们使用xhtml
后缀)。
该模型由注入的Models
对象表示。
这里要注意几件事。 首先,由于控制器是JAX-RS资源,因此还必须创建JAX-RS应用程序配置-扩展javax.ws.rs.core.Application
的类。
其次,除非您将bean.xml包含在bean发现模式 all
,否则您需要使用范围定义注释(例如@RequestScoped
标记控制器,以打开CDI注入Models
模型。
模型
该模型由用String
键标识的对象组成,这些对象在视图页面中被转换为变量。
有两种方法可以定义模型。 首先是将javax.mvc.Models
注入到控制器中,该控制器实际上是一个映射。 然后,控制器动作将对象放入String
键下的注入模型中。
JSP和Facelets还支持带有@Named
CDI限定符的任意CDI bean。 这样,您只需将@Named
注释放在模型上,就可以将任何CDI bean变成模型。
视图
现在到本文的核心–我们将使用facelets在模型中显示数据。 实际上,使用Facelets作为视图技术与使用JSP一样容易。 它只需要正确设置Facelets servlet。
web.xml中的FacesServlet配置
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
FacesServlet需要映射到*.xhtml
。 所有xhtml
页面都应位于Web应用程序内的WEB-INF/views
文件夹内,MVC框架在其中搜索视图文件。
就是这样! 现在,您可以开始使用facelet编写页面,并按path引用它们,它们以xhtml
结尾。
一个示例Hello facelet页面:
hello.xhtml
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html">
<h:head>
<title>Facelet Title</title>
</h:head>
<h:body>
<h1>#{hello}</h1>
</h:body>
</html>
为了显示hello.xhtml,只需从控制器操作中返回"hello.xhtml"
。
摘要
一旦了解了JAX-RS和CDI的基础知识,就可以轻松开始使用MVC框架。 唯一的要求是在支持Ozark参考实现的应用程序服务器之一上运行应用程序。 使用各种视图技术作为默认JSP的替代方案也非常容易。
MVC框架包括对许多视图技术的支持,并能够在其之上插入其他技术。 配置Facelets仅需要在web.xml中配置Faces servlet –设置JSF时需要做的同样的事情。
这篇文章的灵感来自Bennet Schulz的另一篇文章。 如果您想了解有关新MVC框架的更多信息,请访问他的博客。
翻译自: https://www.javacodegeeks.com/2016/02/mvc-1-0-java-ee-8-getting-started-using-facelets.html
facelets