6

当我使用 jsp/jstl 和 jQuery 开发 web 应用程序时,我曾经编写过很好的 html 代码,与样式和脚本分开。JSP 插入了一些奇怪的空格和空行,但没有别的。

现在我正在尝试使用 jsf 进行开发。JSF 有很多用于创建具有大量组件的 RIA 的库,因此使用 jsf 和一些组件库开发 Web 应用程序应该更快。

但是我已经尝试过的所有库都生成了糟糕的 html,其中混合了脚本,并在 html 中混合了一些额外的隐藏输入和样式。这些库还经常提供表格布局(具有不同的 Panel、GridPanel 和其他组件)。

对我来说,它看起来很糟糕,我无法在我的 html 中看到如此大的混乱。

我不确切知道,但我认为 ASP.NET 会产生类似的东西。

那么问题来了:它是 Web 开发的新标准——创建快速而肮脏的 html 吗?

4

3 回答 3

2

JSF 实现倾向于产生有效的标记。所以它不是“脏 html”。不容易被人类阅读的事实并不重要,因此回答您的问题 - 生成的代码是可以接受的。

昨天我对 MyFaces/RichFaces 应用程序进行了 PageSpeed 和 YSlow 测试,除了无法将多个 CSS 和 JS 文件合并为一个(减少 http 请求的数量)之外,其他一切都很好。

于 2009-12-10T15:33:38.360 回答
2

JSP 插入了一些奇怪的空格和空行,但没有别的。

顺便说一句,那个空白是可以修剪的。在 Tomcat 和克隆中,您需要做的就是将JspServlet's init 参数设置trimSpacestrue.

但是我已经尝试过的所有库都生成了糟糕的 html,其中混合了脚本,并在 html 中混合了一些额外的隐藏输入和样式。这些库还经常提供表格布局(具有不同的 Panel、GridPanel 和其他组件)。

如果这是您最关心的问题,那么请继续进行基本的 JSF 实现。它提供了您开始所需的一切,如有必要,可以在Tomahawk的帮助下获得更多增强的组件(例如无表无线电/复选框)和缺少的组件(例如文件上传和数据列表)。

这样你就可以按照通常的方式来做 CSS:完全外部化在一个单独的文件中,并且只styleClass在 JSF 中使用。不要使用该style属性混合内联 CSS。如果您想要样式化以冒号分隔的 JSF 客户端 ID(冒号是 CSS 中的非法标识符),那么您只需在选择器中使用反斜杠对其进行转义例如#formid\:inputid { background: gray; }

也不要使用属性混合内联脚本on*。使用jQuery引入不显眼的Javascript。至于来自 JSF 组件的自动生成的 Javascript,在基本实现中你只会得到这个,h:commandLink它基本上是一个<a>提交隐藏 POST 表单的元素。由于这在语义/技术/SEO 上是错误的,我根本不会使用它。只需使用h:commandButton提交表单和h:outputLink导航。

至于表格设计,从 JSF 1.2 开始,您可以在模板中编写纯 HTML。您可以只使用<div>元素来定义定位的内容元素。如果您是一个纯粹主义者,您甚至可以使用 JSF<h:panelGroup layout="block">来获取 HTML<div>元素。绝对没有必要使用<h:panelGrid>来定位内容元素。

我不确切知道,但我认为 ASP.NET 会产生类似的东西。

确实如此。

那么问题来了:它是 Web 开发的新标准——创建快速而肮脏的 html 吗?

不,你已经掌握了它。

于 2009-12-10T15:54:37.910 回答
0

我同意你的观点,JSF(和所有组件库)生成的 HTML 非常糟糕,但它仍然有效。

我认为主要问题是生成的代码必须与市场上的主要浏览器兼容,包括 Internet Explorer 6+、Firefox、Opera、Chrome……这导致开发人员有时会创建一个非常糟糕的 HTML,只是因为“它适用于所有浏览器”...

于 2009-12-10T15:52:26.917 回答