一尘不染

如何避免在Struts中生成更多HTML元素

jsp

当使用Struts(2)的UI标签时,会自动生成更多HTML元素,例如,当定义`<s:form …

它包含form在时table(即使我们未声明此类表)。因此,如果使用了任何CSS元素(例如,仅使用div标签并根据定位输入元素CSS`),则由于自动生成的元素及其位置,所有元素均未按预期方式查看。即使允许Struts生成此类元素,并且我们向其中添加CSS,也必须增加另一个负担来添加CSS来设计自动生成的html元素,因为会在不同位置和大小下生成更多元素。我也觉得,更多的html代码可能会影响浏览器页面的加载时间。

那么,有没有一种方法可以避免在使用Struts UI标记时生成此类元素,
或者ELSE
是否有一种方便的方法在Struts
UI标记中使用CSS?(我在Stackoverflow中读了一个问题,它的答案是,最后添加struts生成的css。但是,与普通的jsp
html设计水平相比,这并不容易。)


阅读 222

收藏
2020-06-10

共1个答案

一尘不染

简而言之,Struts2致力于主题的概念,它提供了某些现成的主题。根据所选主题,渲染视图时,它将为使用的标签生成一些HTML代码。

主题实际上是Struts2的一个非常漂亮的概念,它甚至为您提供了根据您的要求创建自定义主题的方法。

默认情况下,Struts2使用xhtml主题会出现在您的问题中,这意味着它会在渲染所用标记的HTML时生成一些HTML(其中包括表格,如建议的名称所示)。

您可以通过在struts.properties文件或struts.xml文件中指定简单主题来控制HTML的生成

Struts属性文件

struts.ui.theme=simple

Struts.xml文件

<constant name="struts.ui.theme" value="simple" />

开箱即用的S2提供的其他主题是

  • css_xhtml:生成基于div的HTML
  • ajax:用于ajax标签

请注意,简单主题不会生成任何额外的HTML,而只会标记等效的HTML代码,并且您可以通过提供自己的CSS和任何其他属性来完全控制自定义视图。

属性文件以及struts.xml中的上述设置将适用于整个应用程序,这意味着每个标签都将为整个应用程序生成相同的HTML。此外,如果您想控制每个标签HTML的生成,则每个S2标签都应作为一个属性theme,为此属性提供值,例如simple,css_xhtml等,以控制每个标记HTML的生成。

有通过使用以下代码来控制每个请求基础的主题一种多方式 <s:set name="theme" value="'simple'" scope="page" />或

<s:set name="theme" value="%{myTheme}" scope="page" />

选择权全由您自己决定

2020-06-10