📜  Struts 2-主题和模板

📅  最后修改于: 2020-11-11 05:03:24             🧑  作者: Mango


在开始本章的实际教程之前,让我们研究一下https://struts.apache.org给出的一些定义-

Sr.No Term & Description
1

TAG

A small piece of code executed from within JSP, FreeMarker, or Velocity.

2

TEMPLATE

A bit of code, usually written in FreeMarker, that can be rendered by certain tags (HTML tags).

3

THEME

A collection of templates packaged together to provide common functionality.

我也建议您仔细阅读《 Struts2本地化》一章,因为我们将再次以相同的示例进行练习。

当您在网页中使用诸如等的Struts 2标记时,Struts 2框架会生成具有预配置样式和布局的HTML代码。 Struts 2带有三个内置主题-

Sr.No Theme & Description
1

SIMPLE theme

A minimal theme with no “bells and whistles”. For example, the textfield tag renders the HTML tag without a label, validation, error reporting, or any other formatting or functionality.

2

XHTML theme

This is the default theme used by Struts 2 and provides all the basics that the simple theme provides and adds several features like standard two-column table layout for the HTML, Labels for each of the HTML, Validation and error reporting etc.

3

CSS_XHTML theme

This theme provides all the basics that the simple theme provides and adds several features like standard two-column CSS-based layout, using

for the HTML Struts Tags, Labels for each of the HTML Struts Tags, placed according to the CSS stylesheet.

如上所述,如果您未指定主题,则Struts 2将默认使用xhtml主题。例如,此Struts 2选择标签-


生成以下HTML标记-



   
      
   
   
      
   


此处的empinfo是struts.xml文件中定义的操作名称。

选择主题

您可以根据Struts 2的标签指定主题,也可以使用以下方法之一指定Struts 2应该使用的主题-

  • 特定标签上的主题属性

  • 标签周围表单标签上的主题属性

  • 页面范围的属性名为“主题”

  • 请求范围的属性名为“主题”

  • 会话范围的属性名为“主题”

  • 应用程序范围内的属性名为“主题”

  • struts.properties中的struts.ui.theme属性(默认为xhtml)

如果您愿意对不同的标签使用不同的主题,则以下是在标签级别指定它们的语法-


因为在每个标签上使用主题不是很实际,所以我们可以简单地使用以下标签在struts.properties文件中指定规则-

# Standard UI theme
struts.ui.theme = xhtml
# Directory where theme template resides
struts.ui.templateDir = template
# Sets the default template type. Either ftl, vm, or jsp
struts.ui.templateSuffix = ftl

以下是我们从本地化一章获得的结果,在本地化一章中,我们在struts-default.properties文件中使用了默认主题,并将其设置为struts.ui.theme = xhtml ,默认情况下位于struts2-core.xy.z.jar文件中。

英文输出

主题如何运作?

对于给定的主题,每个struts标记都有一个关联的模板,例如s:textfield→text.ftls:password→password.ftl等。

这些模板文件压缩在struts2-core.xy.z.jar文件中。这些模板文件为每个标签保留了预定义的HTML布局。

这样, Struts 2框架使用Sturts标记和关联的模板生成最终的HTML标记代码。

Struts 2 tags + Associated template file = Final HTML markup code.

默认模板是用FreeMarker编写的,扩展名为.ftl

您也可以使用Velocity或JSP设计模板,并相应地使用struts.ui.templateSuffixstruts.ui.templateDir在struts.properties中设置配置。

创建新主题

创建新主题的最简单方法是复制任何现有主题/模板文件并进行所需的修改。

让我们从在WebContent / WEBINF / classes中创建一个名为template的文件夹以及一个带有新主题名称的子文件夹开始。例如, WebContent / WEB-INF / classes / template / mytheme

从这里开始,您可以从头开始构建模板,也可以从Struts2发行版中复制模板,以后可以根据需要对其进行修改。

为了学习目的,我们将修改现有的默认模板xhtml 。现在,让我们将内容从struts2-core-xyzjar / template / xhtml复制到我们的主题目录,并仅修改WebContent / WEBINF / classes / template / mytheme / control .ftl文件。当我们打开control.ftl时,将有以下几行-

style="${parameters.cssStyle?html}" #if> >

让我们将文件control.ftl更改为以下内容-

如果要检查form.ftl ,则会发现该文件中使用了control.ftl ,但是form.ftl从xhtml主题引用了此文件。因此,让我们如下进行更改-

onreset = "${parameters.onreset?default('clearErrorMessages(this);\
   clearErrorLabels(this);')}"
   

   
      onreset="${parameters.onreset?html}"
   #if>
#if>
#include "/${parameters.templateDir}/mytheme/control.ftl" />

我认为,您对FreeMarker模板语言不会有太多的了解,但是您仍然可以通过查看.ftl文件来很好地了解要做什么。

但是,让我们保存以上更改,然后返回到本地化示例并使用以下内容创建WebContent / WEB-INF / classes / struts.properties文件

# Customized them
struts.ui.theme = mytheme
# Directory where theme template resides
struts.ui.templateDir = template
# Sets the template type to ftl.
struts.ui.templateSuffix = ftl

现在,在进行此更改之后,右键单击项目名称,然后单击“导出”>“ WAR文件”以创建War文件。然后,将此WAR部署在Tomcat的webapps目录中。最后,启动Tomcat服务器并尝试访问URL http:// localhost:8080 / HelloWorldStruts2 。这将产生以下屏幕-

主题和模板

您可以看到表单组件周围的边框,这是我们从xhtml主题复制出来后在out主题中所做的更改的结果。如果您不花力气学习FreeMarker,那么您将可以非常轻松地创建或修改主题。

我希望现在您对Sturts 2主题和模板有了基本的了解,不是吗?