【工作笔记】007 xml文件的dtd和xsd以及WADE框架相关

xml:

了解了dtd和xsd的区别:

dtd:

即document type defintion ,作用是较验xml文件。

dtd包含了元素的定义规则,元素关系的定义规则,元素的属性以及实体或符号规则。

但因为是用其他方式编写的(不是xml)所以了解就好。

xsd:

也就是XML Schema Defintion,用于替代DTD。

相比于DTD主要有以下几个特点(参考自w3school)

  • 支持数据类型

  • 可扩展

  • 可保护数据通信

xsd是用xml语言编写的,所以很好阅读:

比如下面这个xsd文件:

<?xml version="1.0"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
        <xs:element name="student">
            <xs:complexType>
                <xs:sequence>
                    <xs:element name="name" type="xs:string"/>
                    <xs:element name="age" type="xs:int"/>
                </xs:sequence>
            </xs:complexType>
        </xs:element>
    </xs:schema>

这样就定义了一个student类型的xsd,在xml中引入这个xsd就可以得到编译器的提示,以及较验xml文件

<?xml version="1.0"?>
    <!DOCTYPE student SYSTEM "a.xsd">
    <student>
        <name>老吴</name>
        <age>20</age>
    </student>

SYSTEM表示从本地引入,对应的PUBLIC表示从网络上引入xsd文件。

xml是一个很重要的文件,大部分配置文件都会用到它,以及作文数据交换的文件,虽然现在用json的比较多,但是作为配置文件首选的还是xml。


WADE框架相关:

WADE是在typestry基础上封装的一个框架,了解了它的工作原理后发现和SpringMVC很类似。

它主要有三个方面:

1.Page文件

2.模板文件,即html文件(也有wsl文件,但是貌似用的不多?)

3.与Page相关联的java类

html文件就是用作展示,在html文件中用到了框架封装的模板,在标签中用jwcid=”@xxx”进行引用,例如显示一个值:

<span jwcid="@Insert" value="老吴"></span>

就会显示“老吴”。

也可以在标签中用ognl表达式:

<span jwcid="@Insert" value="ognl:param"></span>

这样就会获取到param的值,但是前提是后台传来了一个 交param的值。

另外常用的还用@Foreach等等

还有Condition进行条件判断。

这就很像thymeleaf模板引擎的表达式,当然这些表达式是没有thymeleaf的好用的(自我感觉)。

然后上边说到获取后台传值的问题,那么既然是一个静态的html页面是怎么获取到值的呢?其实就是Page文件进行关联的。一个Page文件对应了一个模板和一个Java类,这个Java类需要继承BasePage类,如下:

    public abstract class TestPage  extends SimplePageComm{
        public abstract void setInfos(IDataset dataset);

        public void initPage(IRequestCycle cycle) throws Exception
        {
            PageData pd = getPageData();
            TestBean bean = getBean();
            bean.getAllArticles(pd);
        }
    }

一个TestPage类,当然还有与之对应的html和Page文件,先看这个类:

继承了SimplePageComm,为什么不是BasePage呢,因为SimpPageComm还有其他的功能,我们继承一个功能多的,可能会用到。

然后它有一个initPage的方法在这方法中我们可以做一些页面初始化的工作,注意到这个方法有一个参数IRequestCycle cycle,它是对request和response进行了封装,把请求和响应放在了一起。

然后注意到这里有一个抽象方法setInfos(Idataset cycle),这个方法就是传值用的。这里的info和Page文件中的属性名以及html文件中取值时id变量名保持一致。

下面是page文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE page-specification PUBLIC
  "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
  "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">

  <page-specification class="wxg.test.TestPage">
        <property-specification name="infos" type="com.linkage.appframework.data.IDataset"/>
  </page-specification>

page-specification描述了这个page文件和哪个类关联,这里和wxg.test.TestPage这个类进行了关联。

property-specification指定了这个类的属性值,要和类中的保持一致。

type表示这个属性的java类型

然后是html文件:

    <span jwcid="@DocType"></span>
    <html>
        <body >
            <!--<p jwcid="@Insert" value="ognl:infos"></p>-->

            <table>
                <tbody>
                    <tr jwcid="@Foreach" source="ognl:infos" value="ognl:info" element="tr">
                        <td jwcid="@Insert" value="ognl:info.xxx"></td>
                        <td jwcid="@Insert" value="ognl:info.xxx"></td>
                        <td jwcid="@Insert" value="ognl:info.xxx"></td>
                    </tr>
                </tbody>
            </table>
        </body>
    </html>

这里用了一个循环来取到infos的值,取值方式和其他诸如el表达式呀th表达式呀都类似。

注意到里边有个element,还不知道是干嘛的。以后在说吧。

原文地址:https://www.cnblogs.com/cnsec/p/13286679.html