facelets_Java EE 8中的MVC 1.0:使用Facelets入门

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 {@Injectprivate Models model;@GETpublic 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/336540.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python实现端口转发_python实现超简单端口转发的方法

本文实例讲述了python实现超简单端口转发的方法。分享给大家供大家参考。具体如下&#xff1a;代码非常简单&#xff0c;实现了简单的端口数据转发功能&#xff0c;用于真实环境还需要再修改一下。代码如下:#tcp serverimport sockethost 127.0.0.1 #Local Server IP…

C++防卫式编程

#ifndef XXXXXX #define XXXXXX //代码段 #endif 此段代码保证了&#xff0c;在多重包含情况下不会重复包含。 1.如果已经定义了defineXXX则代码段不会被编译&#xff0c;反之则会编译

storm apache_Apache Storm的实时情绪分析示例

storm apache实时情感分析是指处理自然语言文本&#xff08;或语音&#xff09;流以提取主观信息。 琐碎的用例用于构建推荐引擎或查找社交媒体趋势。 我选择了Apache Storm作为实时处理引擎。 Storm非常强大&#xff08;我们正在生产中使用它&#xff09;&#xff0c;并且非常…

怎么用python画圆的公式_怎么用python画圆

python中内置了许多第三方库&#xff0c;来帮助它完成各种功能。Turtle库就是Python语言中一个很流行的绘制图像的函数库(推荐学习&#xff1a;Python视频教程)Turtl库用于绘制线、圆、其他形状或者文本这个库被介绍为一个最常用的用来给孩子们介绍编程知识的方法库&#xff0c…

C++函数后置返回类型

//后置函数返回类型声明 auto func(int a, int b)->void; //后置函数返回类型定义 auto func(int a, int b)->void {return; }

嵌入式java基准测试_Java正则表达式库基准测试– 2015年

嵌入式java基准测试在尝试使Java在计算机语言基准游戏的regexdna挑战中排名第一时&#xff0c;我正在研究Java正则表达式库的性能。 我可以找到的最新网站是2010年的tusker.org 。因此&#xff0c;我决定使用Java Microbenchmarking Harness重做测试并发布结果&#xff08;破坏…

java决策树_【Java】决策树介绍和使用

现在生活中&#xff0c;越来越多的时候 需要进行判断和决策&#xff0c;因此关于怎么去判断和决策&#xff0c;需要根据一定的依据进行判断和决策&#xff0c;并不是凭空的按照自己的意愿去判断和决策&#xff0c;就比如举个例子&#xff1b; 假如甲同学准备结婚&#xff0c;但…

C++ 【随想录】(五)C 文件操作

#include<iostream> #include<cstdio> using namespace std;int main() {FILE *fp1 NULL; //指向源文件FILE *fp2 NULL; //指向目的文件char *byBuffNULL; //缓存int fileBytes 0; //文件大小const char* pSrc "M3.264";const char* pDest "M…

stackoverflow_Stackoverflow的见解:投票最多的是Spring 4问题

stackoverflow在Stackoverflow上对Spring 4问题进行投票和回答最多的是什么&#xff1f; 以下是最常见的五个问题和解答。 Spring中的 Component&#xff0c; Controller&#xff0c; Repository和Service批注有什么区别&#xff0c;它们可以互换使用还是具有特定功能&#xf…

java 编译顺序_关于java中一次编译多个源文件时的编译顺序的问题

为了节省回答者的时间我先把问题提出来&#xff0c;再针对问题案例作详细说明。如果能不用看问题案例就回答出来当然省时。我的问题是java里面&#xff0c;用命令行提示符环境编译源文件的时候&#xff0c;加上*通配符...为了节省回答者的时间我先把问题提出来&#xff0c;再针…

宏定义细节

#define PI(a,b) ab //分析 /* PI(a,b)a,b是参数 后面的ab进行运算 返回值作为PI的宏定义

libgdx和unity_libgdx和Kotlin –类[2D平台原型]

libgdx和unity这篇文章是libgdx和Kotlin文章的后续文章。 我已经决定开发一个简单的2D平台程序的原型&#xff08;沿着我的早期文章中的Star Assault进行介绍&#xff09;&#xff0c;但是我一直在使用和学习Kotlin&#xff0c;而不是Java。 对于本教程&#xff0c;该项目应处…

java1.7开发环境_在Windows平台搭建Java 1.7开发环境

OS&#xff1a;Windows 7 or laterJava Version: 1.7.x本文具体的演示环境是&#xff1a;Windows 8.1&#xff0c;Java 1.7.0_45。一、安装JDK需要注意的是安装路径中不要出现非西文符号。实际上我一般喜欢在安装路径中也尽可能不出现空格。比如&#xff1a;在我的PC上&#xf…

浅谈人工智能

所谓人工智能&#xff0c;主旨是让它有用“自己的思维模式”

java timer开销_减少Java垃圾收集开销的5条提示

java timer开销保持较低的GC开销的一些最有用的技巧是什么&#xff1f; 随着Java 9即将再次延迟发布&#xff0c;G1&#xff08;“垃圾优先”&#xff09;垃圾收集器将设置为HotSpot JVM的默认收集器。 从串行垃圾收集器一直到CMS收集器&#xff0c;JVM在其整个生命周期中都见…

C++STL Vector

#include<iostream> #include<vector> using namespace std;int main() {//vector构造函数vector<int>A(); //无参数&#xff0c;构造一个空的vectorvector<int>B(10, 1);//数量(num)和值(val) - 构造一个初始放入num个值为val的元素的Vector vector&…

java serializable 源码_Java源码分析之-Serializable接口

一、基本概念Serializable接口&#xff1a;1. 实现了Serializable接口的类&#xff0c;可以进行序列化和反序列化&#xff1b;没有实现这个接口的类的任何(state)状态/域或者属性值不能被序列化2. All subtypes of a serializable class are themselves serializable. 所有实现…

gluon_带有Gluon Ignite和Dagger的JavaFX中的依赖注入

gluon依赖注入抽象框架Gluon Ignite在几个流行的依赖注入框架&#xff08;例如Spring&#xff0c;Dagger和Guice&#xff09;上创建了一个通用抽象。 目前&#xff0c;Gluon 页面仅包含一个示例&#xff0c;该示例使用Gluon Ignite和Google Guice作为依赖注入框架&#xff0c;…

快速排序 自带时间复杂度检测

//时间复杂度 O(N*log2N //稳定性&#xff1a;不稳定 //来源于分治思想 /* 确定分界点 调整区间 递归处理两端算法思想&#xff0c;快排是基于冒泡排序的优化&#xff0c;冒泡排序从一侧开始进行&#xff0c;而快排是两边同时进行从而时间复杂度折半&#xff0c;同时包含了二…

java arraylist 常用方法_分享ArrayList中的几个常用方法的源码

jdk1.7.0_79上文里解析了有关ArrayList中的几个常用方法的源码——《有关ArrayList常用方法的源码解析》&#xff0c;本文将对LinkedList的常用方法做简要解析。LinkedList是基于链表实现的&#xff0c;也就是说它具备了链表的优点和缺点&#xff0c;随机访问慢、插入删除速度快…