JSP

学习笔记 Eclipse Struts2 Examples-Us

2017-07-19  本文已影响0人  Android那些事儿

文章摘要
1、Struts 2 url标签
2、Struts 2表单标签
3、Struts 2属性标签


英文文献请点击此处~

Hello World中,我们添加了一个Struts 2 url标签index.jsp
来创建一个超链接hello.action。

    <body>
        <h1>Welcome To Struts 2!</h1>
        <p><a href="<s:url action='hello'/>">Hello World</a></p>
    </body>

要在视图页面上使用Struts 2标签,您必须包含一个标签库指令。通常,taglib伪指令是<%@ taglib prefix="s" uri="/struts-tags" %\>。所以所有Struts 2标签的前缀将为“s”。如果要实际读取Struts 2标签TLD文件,您可以在Struts 2核心jar的“META-INF”文件夹中找到它。

接下来,我们在Hello World的基础上,增加标签的使用案例。

一、Struts 2 url标签

Struts 2标签的一个用途是创建到其他Web资源的链接,特别是本地应用程序中的其他资源。

虽然HTML为创建超链接提供了一个简单的标签,但HTML标签通常需要我们包含重复、冗余信息。HTML标签也不容易访问框架提供的动态数据。

<p><a href="<s:url action='hello'/>">Hello World</a></p>
<s:url action="hello" var="helloLink">
      <s:param name="userName">Bruce Phillips</s:param>
    </s:url>
    <p><a href="${helloLink}">Hello Bruce Phillips</a></p>

二、Struts 2表单标签

大多数应用程序将使用多个数据输入表单。Struts 2标签使得创建输入表单变得容易。
每个Struts 2表单标签都有许多属性来模拟正常的HTML表单标签属性。

要创建窗体的外壳,请使用Struts 2表单标签。action属性设置要提交的操作名称。

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Basic Struts 2 Application - Welcome</title>
  </head>
  <body>
    <h1>Welcome To Struts 2!</h1>
    <p>Get your own personal hello by filling out and submitting this form.</p>
    <s:form action="hello">
      <s:textfield name="userName" label="Your name" />
      <s:submit value="Submit" />
    </s:form>
  </body>
</html>

表单标签,在浏览时,浏览页面:

页面中的struts 标签,会转化为html:

<form id="hello" name="hello" action="/using-tags/hello.action;jsessionid=6233ot11na1mtshbr292hu1w" method="post">
  <table class="wwFormTable">
    <tr>
      <td class="tdLabel"><label for="hello_userName" class="label">Your name:</label></td>
      <td class="tdInput"><input type="text" name="userName" value="" id="hello_userName"/></td>
    </tr>
    <tr>
      <td colspan="2">
        <div class="formButton">
          <input type="submit" value="Submit" id="hello_0"/>
        </div>
      </td>
    </tr>
  </table>
</form>

三、Struts 2属性标签

<s:property value="messageStore.message" />

属性标签最常见的用法是通过调用公共get方法(Action类)“获取”返回的值,然后将该值包含在返回给浏览器的HTML中。

Hello World教程中所讨论的,messageStore.message指示Struts 2首先调用getMessageStore Action类的方法的值。该方法调用返回一个MessageStore对象。该.message部分指示Struts 2调用MessageStore对象的getMessage方法。该getMessage方法返回一个String,该字符串将包含在返回给浏览器的HTML中。

Struts 2属性标签的一个非常有用的功能是它会自动将最常见的数据类型(int,double,boolean)转换为其等效字符串。为了演示此功能,我们将一个静态int变量添加到类中HelloWorldAction。

HelloWorldAction.java

package wanghailu.apache.struts.action;

import com.opensymphony.xwork2.ActionSupport;
import wanghailu.apache.struts.model.MessageStore;

public class HelloWorldAction extends ActionSupport {

    private static final long serialVersionUID = 1L;
    

    private MessageStore messageStore;
    
    private static int helloCount = 0;
    
    public int getHelloCount() {
        return helloCount;
    }

    public String execute() throws Exception {
        messageStore = new MessageStore() ;
        
        helloCount++;
        
        return SUCCESS;
    }

    public MessageStore getMessageStore() {
        return messageStore;
    }

}

每次调用execute方法时,我们将增加helloCount1.所以将这个代码添加到类的execute方法中HelloWorldAction.

每当用户单击页面index.jsp上的链接之一(或提交表单)时,将运行execute类的方法,HelloWorldAction并将静态字段helloCount增加1。

要包含helloCount属性的值,HelloWorld.jsp我们可以使用Struts 2属性标记。

<p>I've said hello <s:property value="helloCount" /> times!</p>

所以即使该getHelloCount方法返回一个整数类型,Struts 2将其转换为String类型并将其放入p标签的正文中。

请注意,即使helloCount是静态字段,get方法helloCount也不是静态的。对于Struts 2调用getHelloCount方法来获取值helloCount,该getHelloCount方法不能是静态的。

如果get方法返回的值是一个对象,那么属性标签将导致Struts 2调用该对象的toString方法。当然,您应该始终toString在模型类中覆盖Class Object的方法。将以下toString方法添加到MessageStore类中:

public String toString() {
   return message + " (from toString)";
}   
<p><s:property value="messageStore" /></p>

由于getMessageStore的HelloWorldAction类返回MessageStore对象,搭片2将调用toString类的方法MessageStore。该toString方法返回的字符串将显示在浏览器中。

上一篇下一篇

猜你喜欢

热点阅读