JSF视图技术如何翻译客户端?

时间:2012-03-30 22:32:52

标签: java jsf richfaces icefaces

所以我理解JSP是客户端代码(DHTML,JS,CSS等)和Java的混合体。通过这种方式,JSP有点像纯PHP或纯ASP。当Web容器收到JSP请求时,它会编译JSP中的Java,执行它,然后在HTTP响应中返回生成的客户端代码。

我也理解JSP的替代品是Servlet,或者像FreeMarker这样的Servlet /模板组合。 servlet包含纯Java(业务逻辑),模板包含表示逻辑。

我不明白的是,RichFaces,PrimeFaces和ICEFaces等JSF派生技术如何将Java代码转换为可在浏览器中运行的客户端代码。我还听说这些框架的主要吸引力在于它们带来的“丰富”UI控件,但我很难连接所有的点。

这些框架是否像GWT一样编译成JS?如果是这种情况,那么我会假设这些丰富的UI控件与jQuery UI控件相同,例如纯JS。

如果情况并非如此,那么我根本不理解(根本)这些框架如何将服务器端代码转换为可以执行客户端的“东西”。

提前致谢!

2 个答案:

答案 0 :(得分:2)

  

我不明白的是,RichFaces,PrimeFaces和ICEFaces等JSF衍生技术如何将Java代码转换为可在浏览器中运行的客户端代码

HTML由UIComponent和/或Renderer实施的encodeXxx()方法生成。这些方法在呈现响应阶段调用,从UIViewRoot开始,它将调用一直委托给整个组件树层次结构。

JSF实现,例如Mojarra,几乎所有组件库都是开源的。以JSF标准<h:inputText>组件为例,开始查看com.sun.faces.renderkit.html_basic.TextRenderer类以查看所有HTML生成代码。


  

这些框架是否像GWT一样编译成JS?

绝对不是。在浏览器中打开JSF页面,右键单击查看源。这些只是HTML代码,如果需要,还有自动包含的CSS / JS文件。使用GWT,它是一个和所有JS代码。

另见:

答案 1 :(得分:2)

不,JSF不像GWT。这个想法是不同的。但是,让我们从头开始。

Servlet并不是JSP的替代品。 JSP是一种技术,它负责在模型 - 视图 - 控制器设计模式中查看部分。 Servlet通常扮演控制器的角色。

在典型的场景中,Servlet接收来自用户的请求,解析它并调用bussines逻辑(Model) - 它可能只是一组java类或EJB组件或其他任何计算内容,与数据库对话等等。 Servlet从bussines逻辑(如果有的话)获取数据,并将用户重定向到正确的View元素 - JSP,纯HTML页面,一些模板引擎等。

JSF是JSP + Servlets的一个层,它使程序员的生活变得更轻松(虽然很多人会强烈反对:)但

JSF页面基本上是一个JSP页面,它使用一组专用标记 - 组件(JSF本机标记或RichFaces标记或ICE Faces标记)。这些标签可以用Java编写,可以绑定JavaScript,CSS。最后的效果是这些标签生成代表“组件”的HTML,例如具有排序功能的花式表。

所以你有一个放在JSP页面上的实例组件,它代表了很好看的表。

此外,JSF配备了标准控制器,它不是用Java编写的,而是用XML编写的页面之间的一组导航规则。

另一个元素是JSF Beans,它们与JSF页面绑定,并自动填充从这些页面获取的数据。它通常非常简单 - 用户填写表单,这是JSF页面的一部分(表单也使用专门的标签 - 组件)。提交此表单后,JSF Bean类将填充数据并调用操作方法。 action方法返回一个字符串,用于标识应将用户重定向到的页面(该规则取自XML控制器配置)。

因此,如果JSF的前端部分是在后端生成的 - JSF标记(或组件,就像人们所说的那样)在后端被解释,后端从它们生成HTML。

这可以与分离前端和后端的技术形成对比。后端以XML的形式接收和返回数据,或者更常见的是JSON,并与应用程序的前端部分交换它们。前端可以用JavaScript,Flex等编写。所以后端和前端是完全分开的。

相关问题