zoukankan      html  css  js  c++  java
  • JavaEE ActionForm的高级应用

    scope="request"每次提交都生成一个新的actionform对象,而 scope="session"时,再一次绘画中生成一个actionform对象,保存在session中,获取时从session中获取。 scope决定actionform的生命周期。

    大多数情况用request。也有特殊情况用session。如表单跨页Prj8_1

    Forward类型的action只负责跳转打包不做其他事情

      <action name="reg1Form" forward="/P2.jsp" path="/toP2" scope="session">
          <set-property property="cancellable" value="true" />
        </action>
       
        <action name="reg1Form" path="/reg1" type="prj8_1.action.Reg1Action" scope="session">
          <set-property property="cancellable" value="true" />
        </action>

    注意两个scope都是session,否则前两个的值保留不住。

    验证时用隐藏表单域的方法验证。

    public ActionErrors validate(ActionMapping mapping,
       HttpServletRequest request) {
      // TODO Auto-generated method stub
      
      if (page.equals("1")) {
       if (account.length() == 0) {
        
       }
       if (password.length() == 0) {
        
       }
      }
      if (page.equals("2")) {
       if (phone.length() == 0) {
        
       }
       if (address.length() == 0) {
        
       }
      }
      return null;
     }

    其中page属性就是被隐藏的属性在表单中用<html:hidden property="page" value=""/>用value的值来区别开来。

    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    比如有的页面有三个电话提交时我们可以将他们分别定义成三个属性,但这样造成ActionForm属性太多;我们也可以将其定义为一个数组属性,即String[] phones;这样跳转回来的话有个问题就是三个文本框里会出现[Ljava.lang.String;@17e4dee这是由于它将整个数组返回来了,解决的办法就是<html:text property="phones" value=""/>使其变为空,但很难让他们各填各值。另外还可以利用索引属性,实现如下

    ActionForm中的属性是随着i而变化的

    String[] phones = new String[3];
     
     public String getPhones(int i) {
      return phones[i];
     }

     public void setPhones(int i, String phone) {
      this.phones[i] = phone;
     }

    JSP

     <html:form action="/reg3">
       phone1:<html:text property="phones[0]"></html:text><br>
       phone2:<html:text property="phones[1]"></html:text><br>
       phone3:<html:text property="phones[2]"></html:text><br>
       <html:submit/><html:cancel/>
      </html:form>

    Action

    Reg3Form reg3Form = (Reg3Form) form  
      for (int i = 0; i < 3; i++) {
       System.out.println(reg3Form.getPhones(i));
      }
      return new ActionForward("/reg3.jsp");

    第三种方法可以使text中的文本保持住。

    但是我们可以看到上面这种方法也有一种缺陷,就是你必须知道个数,但能够接受。可以用arraylist,但是顺序没有保障,所以不推荐。

  • 相关阅读:
    利用js读出xml制作地区联动下拉框
    用EXTJS做一个右下角的泡泡窗口(一)
    用Json.net 解析 QQ城市达人中的地址列表
    用httpwebrequest访问跨域网站时对CookieContainer的处理
    asp.net 中PDF模式下省略水晶报表自己的预览
    asp.net 取得URL信息
    利用WebClient 制作调试Http的post 和 get 工具
    超级网银就是一砣 SHI
    SAP R/3 Testing[2]
    [1.1]用WebService返回歌曲的曲目信息.借鉴[星集工作室 张麟 Dephi版]
  • 原文地址:https://www.cnblogs.com/wyhong/p/2388886.html
Copyright © 2011-2022 走看看