JSF 视图技术如何翻译客户端?
Posted
技术标签:
【中文标题】JSF 视图技术如何翻译客户端?【英文标题】:How do JSF view technologies translate client-side? 【发布时间】:2012-04-14 14:58:12 【问题描述】:所以我知道 JSP 是客户端代码(Dhtml、JS、CSS 等)和 Java 的混合体。这样,JSP 有点像纯 php 或纯 ASP。当 Web 容器收到对 JSP 的请求时,它会在 JSP 中编译 Java,执行它,然后在 HTTP 响应中返回生成的客户端代码。
我还了解 JSP 的替代方案是 Servlet,或 Servlet/模板组合,如 FreeMarker。 servlet 包含纯 Java(业务逻辑),模板包含表示逻辑。
我不明白 RichFaces、PrimeFaces 和 ICEFaces 等 JSF 派生技术如何将 Java 代码转换为可以在浏览器中运行的客户端代码。我还听说这些框架的主要吸引力在于它们附带的“丰富”的 UI 控件,但很难将所有点连接起来。
这些框架是否像 GWT 那样编译为 JS?如果是这种情况,那么我会假设这些丰富的 UI 控件与纯 JS 的 jQuery UI 控件相同。
如果不是这样,那么我就是(完全不)理解这些框架如何将服务器端代码变成可以在客户端执行的“东西”。
提前致谢!
【问题讨论】:
【参考方案1】:我不明白 RichFaces、PrimeFaces 和 ICEFaces 等 JSF 派生技术如何将 Java 代码转换为可以在浏览器中运行的客户端代码
HTML 由UIComponent
和/或Renderer
实现的encodeXxx()
方法生成。这些方法在渲染响应阶段被调用,从 UIViewRoot
开始,它在整个组件树层次结构中一直委托调用。
诸如Mojarra 之类的JSF 实现以及几乎所有的组件库都是开源的。以 JSF 标准 <h:inputText>
组件为例,开始查看 com.sun.faces.renderkit.html_basic.TextRenderer
类以查看所有 HTML 生成代码。
这些框架会像 GWT 那样编译成 JS 吗?
绝对不是。在浏览器中打开一个 JSF 页面,右键单击并查看源代码。这只是 HTML 代码,如果需要的话,还有自动包含的 CSS/JS 文件。使用 GWT,它就是一个和所有的 JS 代码。
另见:
Java EE 6 tutorial - Creating custom components - 学习如何自己编程。 What is the difference between JSF, Servlet and JSP? What is the need of JSF, when UI can be achieved from CSS, HTML, javascript, jQuery?【讨论】:
【参考方案2】:不,JSF 与 GWT 不同。这个想法是不同的。但是,让我们从头开始吧。
Servlet 并不是 JSP 的真正替代品。 JSP是一种技术,它负责Model-View-Controller设计模式中的View部分。 Servlet 通常扮演 Controller 的角色。
在典型场景中,Servlet 接收来自用户的请求,对其进行解析并调用业务逻辑(模型)——它可能只是一组 java 类或 EJB 组件或其他任何计算某些东西、与数据库对话等的东西。然后Servlet 从业务逻辑(如果有)中获取数据并将用户重定向到适当的 View 元素 - JSP、纯 HTML 页面、某些模板引擎等。
JSF 是 JSP + Servlets 之上的一层,它使程序员的生活更轻松(尽管许多人强烈反对这一点:))
JSF 页面基本上是一个 JSP 页面,它使用一组专门的标签 - 组件(JSF 原生标签或 RichFaces 标签或 ICE Faces 标签)。这些标签可以用Java编写,可以绑定JavaScript、CSS。最终效果是这些标签生成表示“组件”的 HTML,例如带有排序功能的精美表格。
因此,您拥有放置在 JSP 页面上的示例组件,它代表了漂亮的表格。
此外,JSF 配备了标准控制器,它不是用 Java 编写的,而是用 XML 编写的页面之间的一组导航规则。
还有一个元素是 JSF Bean,它们绑定到 JSF 页面并自动填充从这些页面获取的数据。它通常非常简单 - 用户填写表单,这是 JSF 页面的一部分(表单也使用专门的标签 - 组件)。一旦提交了这个表单,JSF Bean 类就会被数据填充,并且调用 action 方法。 action 方法返回一个字符串,用于标识用户应重定向到的页面(该规则取自 XML 控制器配置)。
因此,如果 JSF 前端部分在后端生成 - JSF 标记(或人们称之为组件)在后端进行解释,后端从它们生成 HTML。
这可以与将前端和后端分开的技术进行对比。后端以 XML 或更常见的 JSON 形式接收和返回数据,并与应用程序的前端部分交换它们。前端可以用 JavaScript、Flex 等编写,所以后端和前端是完全分离的。
【讨论】:
以上是关于JSF 视图技术如何翻译客户端?的主要内容,如果未能解决你的问题,请参考以下文章
jsf 覆盖默认 javax.faces.STATE_SAVING_METHOD 以获得具体视图