zoukankan      html  css  js  c++  java
  • Struts Gossip: 使用 ActionForm

    ActionForm是表單的物件化表示,它本身設計為JavaBean,您要繼承org.apache.struts.action.ActionForm來設計一個表單物件,並提供標準的getter與setter方法,必要時可以使用繼承下來的reset()、validate()等方法供 Struts 組件呼叫。
    當客戶請求交給了 RequestProcessor 後,RequestProcessor會從 ActionMapping 中得知所使用的ActionForm物件,這是在struts-config.xml中設定的,如果所需的ActionForm還不存在就生成一個,之後一直使用它,ActionMapping與ActionForm物件會被當作參數傳遞給 Action
    在Struts 1.1中,ActionForm生成之後,會執行RequestProcessor的processPopulate()方法,首先它會呼叫 ActionForm的reset()方法,您可以在當中作一些重清ActionForm屬性的動作,然後表單的參數值會與ActionForm的 setter進行比對,如果有名稱符合的就將表單的參數值設定給對應的屬性。
    透過繼承ActionForm類別來使用它,下面是一個簡單的例子:

    • UserForm.java
    package onlyfun.caterpillar; 

    import javax.servlet.http.*;
    import org.apache.struts.action.*;

    public class UserForm extends ActionForm {
    private String username;
    private String password;

    public void setUsername(String username) {
    this.username = username;
    }

    public void setPassword(String password) {
    this.password = password;
    }

    public String getUsername() {
    return username;
    }

    public String getPassword() {
    return password;
    }

    public void reset(ActionMapping mapping,
    HttpServletRequest request) {
    username = null;
    password = null;
    }
    }

    必須在struts-config.xml中定義Action物件使用哪一個ActionForm物件:
    • struts-config.xml
    <?xml version="1.0" encoding="ISO-8859-1" ?>

    <!DOCTYPE struts-config PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
    "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">

    <struts-config>
        <form-beans>
            <form-bean
                name="userForm"
                type="onlyfun.caterpillar.UserForm"/>
        </form-beans>

        <action-mappings>
            <action
                path="/login"
                type="onlyfun.caterpillar.LoginAction"
                name="userForm">
                <forward
                    name="helloUser"
                    path="/WEB-INF/pages/hello.jsp"/>
                <forward
                    name="loginFail"
                    path="/WEB-INF/pages/fail.jsp"/>
            </action>
        </action-mappings>
    </struts-config> 

    在這個例子中,<form-bean>標籤定義了所使用的ActionForm物件及其名稱userForm,而在< action>標籤的設定中,LoginAction指定了userForm作為其所使用的ActionForm, LoginAction類別如下:
    • LoginAction.java
    package onlyfun.caterpillar;

    import javax.servlet.http.*;
    import org.apache.struts.action.*;

    public class LoginAction extends Action {
    public ActionForward execute(
    ActionMapping mapping,
    ActionForm form,
    HttpServletRequest request,
    HttpServletResponse response)
    throws Exception {
    String username = ((UserForm) form).getUsername();
    String password = ((UserForm) form).getPassword();

    request.setAttribute("username", username);

    if(username.equals("caterpillar") &&
    password.equals("1234")) {
    return mapping.findForward("helloUser");
    }

    return mapping.findForward("loginFail");
    }
    }

    ActionForm被作為參數傳遞至execute()方法,在驗證使用者的名稱與密碼無誤後,查找helloUser的 ActionForward對象並傳回,這會使得RequestProcessor將請求轉發至hello.jsp:
    • hello.jsp
    <html> 
    <head>
    <title>Hello, ${username} !</title>
    </head>
    <body>
    <H1>Hello, ${username} !</H1>
    <H1>This is your secret gift!!</H1>
    </body>
    </html>

    如果驗證失敗,則查找loginFail的ActionForward對象並傳回,也就是fail.jsp:
    • fail.jsp
    <html> 
    <head>
    <title>Sorry!</title>
    </head>
    <body>
    <H1>Sorry, ${username} !</H1>
    <H1>You must provide correct login information!!</H1>
    <p>
    <a href='/strutsapp/html/form.htm'>Login</a>
    </body>
    </html>

    最後是一個簡單的登入表單,這是個靜態HTML,放在/strutsapp/html下就可以了:
    • form.htm
    <html> 
    <head><title>Login</title></head>
    <body>
       Please login:<p>
        <form name="userForm" action="/strutsapp/login.do" method="post">
       username <input type="text" name="username"/><br>
       password <input type="password" name="password"/><p>
            <input type="submit"/>
        </form>
    </body>
    </html>

    ActionForm在Struts中是屬於View組件的一部份,它是物件化的表單,表單的參數會自動設定給 ActionForm,無法對應的就加以忽略,在ActionForm中您可以填入表單值,作一些適當的值轉換,進行基本的資料驗證, ActionForm可以作為表單資料發送至應用程式前的緩衝區,在某些程度上,它是應用程式的防火牆,您可以在ActionForm中避免不正確或不安全的資料進入應用程式。
  • 相关阅读:
    UIViewController生命周期
    NSTImer重复执行任务
    IOS平台汉字转拼音方案
    @properties指针说明
    自定义yum仓库
    man手册、zip备份
    ln 软连接与硬连接
    fdisk分区规划和添加wap交换空间
    window部署ftp服务器
    配置附加权限和LDAP
  • 原文地址:https://www.cnblogs.com/pony/p/1240940.html
Copyright © 2011-2022 走看看