1. 程式人生 > >在juqery的ajax和struts2整合開發時,物件資料的從頁面到Action的傳遞問題

在juqery的ajax和struts2整合開發時,物件資料的從頁面到Action的傳遞問題

1.首先是最基本的通過表單的提交傳值:在struct2 開發時,頁面上表單的中輸入框的名字,對應與表單要提交的action中的屬性名字,當表單提交後,為了更好的說明問題,在此,我將struts中的一個action映射覆制過來,<action name="message" class="com.hwadee.action.EchoAction" method="echo">  <result name="success">/view.jsp</result>  </action>,stucts2自動呼叫action對映的類,然後呼叫類預設的構造方法,新建一個該類物件,然後呼叫物件的echo()方法(入夥上面的method=“echo”  沒寫,則物件預設呼叫物件的excute()方法。)。此時該物件的屬性中的值就為頁面表單提交過來的值對應一樣的了。

2.然後是通過jquery ajax傳值到action中:

<form id="myForm">
               名稱:<input type="text" id="username" name="username"/><br/>
               密碼:<input type="password" id="password" name="password"/><br/>
           &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
               <input id="Button1" type="button" class="btn" value="登入"/>
               &nbsp;
               <input id="Button2" type="reset" class="btn" value="取消"/>
         </form>

這是表單的程式碼。

<script type="text/javascript">
       $(function()
       {
           $("#Button1").click(function(){
              var mName=encodeURI($("#username").val());
              var mPass=encodeURI($("#password").val());
              $.ajax(
              {
                  url:"loginUser.action",
                  dataType:"html",
                  data

:{

username:mName,//前面的username必須跟action中的私有屬性username一致。

password:mPass,//前面的password必須跟action中私有屬性password一致。

}
                  success:function(strValue
)//strValue是action返回的資料,是文字格式的。
                  {
                     alert(strValue);
                    
                     if(strValue=="yes"){
                         $("#divTip").html("操作提示,登入成功!");
                     }else
                     {
                         $("#divTip").html("使用者名稱或密碼錯誤!");
                     }
                  }
              })
           })
       })
  

以上的js程式碼。

package struts2.action;
import org.apache.struts2.ServletActionContext;
import com.hwadee.entity.UserInfo;
import com.opensymphony.xwork2.ActionSupport;
 
public class LoginAction extends ActionSupport {
    private String username;
    private String password;
   



public String getUsername() {
return username;
}


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


public String getPassword() {
return password;
}


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


public String execute() throws Exception {

       String message="";
   
       if("wll".equals(username)&& "123".equals(password))
       {
      message="yes";
       }else{
      message="no";
       }
       //向客戶端傳遞資料
    ServletActionContext.getResponse().getWriter().print(message);
       return null;
    }
}

以上是action中的程式碼。

此時當點選button1按鈕時,表單裡的資料,就會通過jquery  ajax 非同步傳送到action中。然後呼叫excute()方法,返回一個message。然後頁面判斷message是yes還是no。並給出對應的相應。

3.以上只是傳遞一個屬性,該屬性是String型別的。但是,strut2 中,一般用實體類物件來暫時儲存資料,也是用實體類物件來當引數來傳遞資料的。所以在action中就會有很多屬性 是實體類的物件。此時,我們用上面方法2的措施是行不通的。就需要下面的方式。

程式碼基本差不多。

實體類UserInfo

package com.hwadee.entity;


public class UserInfo {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String toString(){
return username+"   "+password;
}
}

程式碼很簡單,不用解釋。

以下是action類

package struts2.action;
import org.apache.struts2.ServletActionContext;
import com.hwadee.entity.UserInfo;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport {
private UserInfo userinfo;//實體物件。

public UserInfo getUserinfo() {
return userinfo;
}


public void setUserinfo(UserInfo userinfo) {
this.userinfo = userinfo;
}


public String execute() throws Exception {

       String message="";
     System.out.print(userinfo);
       if("wll".equals(userinfo.getUsername())&& "123".equals(userinfo.getPassword()))
       {
      message="yes";
       }else{
      message="no";
       }
       //向客戶端傳遞資料
    ServletActionContext.getResponse().getWriter().print(message);
       return null;
    }
}

以下是html程式碼:

 <form id="myForm">
               名稱:<input type="text" id="userinfo.username" name="userinfo.username"/><br/>     //表單文字框名字對應action實體物件的屬性名字。
               密碼:<input type="password" id="userinfo.password" name="userinfo.password"/><br/>
           &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
               <input id="Button1" type="button" class="btn" value="登入"/>
               &nbsp;
               <input id="Button2" type="reset" class="btn" value="取消"/>
            </form>

以下死js程式碼:

<script type="text/javascript">
       $(function()
       {
           $("#Button1").click(function(){
            //  var mName=encodeURI($("#userinfo.username").val());
             // var mPass=encodeURI($("#userinfo.password").val());
              $.ajax(
              {
                  url:"loginUser.action",
                  dataType:"html",
                  data:$("#myForm").serialize(),//序列化,將表單中的所有資料傳送到伺服器
                  success:function(strValue)
                  {
                     alert(strValue);
                    
                     if(strValue=="yes"){
                         $("#divTip").html("操作提示,登入成功!");
                     }else
                     {
                         $("#divTip").html("使用者名稱或密碼錯誤!");
                     }
                  }
              })
           })
       })
   
    </script>

此時action中的userinfo物件的username和password屬性就和頁面文字框中的對應的userinfo.username和userinfo.password的值一樣了。

附:struts2.xml

<package name="struts2.action" extends="struts-default">
    <action name="loginUser" class="struts2.action.LoginAction">
    </action>

相關推薦

在juqery的ajaxstruts2整合開發物件資料頁面Action傳遞問題

1.首先是最基本的通過表單的提交傳值:在struct2 開發時,頁面上表單的中輸入框的名字,對應與表單要提交的action中的屬性名字,當表單提交後,為了更好的說明問題,在此,我將struts中的一個action映射覆制過來,<action name="message

Spring整合mybatis資料庫配置com.mysql.jdbc.Drivercom.mysql.cj.jdbc.Driver區別

1、#mysql-connector-java 5 用法 spring.datasource.driver-calss-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnico

微信公眾號開發前端向後端傳送請求獲取signatureopenID出現跨域錯誤的解決辦法。

微信公眾平臺開發用了前端和後端兩個人,前期開發階段前端就很容易遇到跨域問題,今天在前端向後端傳送請求獲取signature,但是前段老是報錯跨域,接受後端的返回資料失敗怎麼辦呢? 其實很簡單,後端最後返回簽名的程式碼本來是這樣的: System.out.println("

Ionic開發預設樣式androidios的一些不同

ionic預設樣式android和ios的一些不同 ionicframework中android和ios在預設樣式上有一些不同的地方,官方文件中都有說明,但是經常會想不起。 1.tab位置,$ionicConfigProvider, tabs.position(val

ZeptoJquery的區別以及在做移動端開發我們為什麼選擇使用zepto

【今晚實在不想寫別的,所以決定把近兩天的收穫整理整理,那我們就簡單的來談談Zepto.js和Jquery的區別,以及在做移動端開發時,我們為什麼選擇使用zepto.js】 一、先來看看我們熟悉的jQuery的定義: jQuery它是一個JavaScript函式庫,執行快

在使用DelphiXE3SQLite3進行程式開發解決最後一個字元亂碼的問題

在使用DelphiXE3和SQLite3進行程式開發時,如果使用原版的SQLiteTable3,當使用UTF8Decode函式之後,可能依然存在亂碼問題,一個表現就是,最後一個漢字顯示為框,後面跟一個問號,其他的漢字解碼正常。後來跟蹤了一下SQLiteTable3的原始碼,從

SSH中springstruts2整合遇到的問題Action class not found

我們在對sturts.xml配置檔案中的action進行配置時,action指向的class往往是spring配置檔案applicationContext.xml中的been名,這時候出現了action class not found的問題。檢查action定義

【轉】Spark StreamingKafka整合開發指南

thread ada 關系 方法 拷貝 理解 1.2 reduce arr 基於Receivers的方法 這個方法使用了Receivers來接收數據。Receivers的實現使用到Kafka高層次的消費者API。對於所有的Receivers,接收到的數據將會保存在Spark

Spring Boot + JPA(hibernate 5) 開發數據庫表名大小寫問題

hibernate mysql spring boot 大小寫 這幾天在用spring boot開發項目, 在開發的過程中遇到一個問題hibernate在執行sql時,總會提示表不存在。尋找之後發現, 建表時,表統一采用了大寫。hibernate會把大寫統一轉換成小寫。且 mysql在 lin

JAX-RS Spring 整合開發

進行 div 位置 ans 發包 http out app startup JAX-RS 和 和 Spring 整合開發 1、建立maven項目 2、導入maven坐標 <dependencies> <!-- cxf 進行rs開發

整合ssh關於Spring IOC注入問題

No matching editors or conversion strategy found IOC問題: EmpService bean 實現了 Iemp介面,就不能直接作為引數傳入Action裡面; 要將Iemp介面作為物件引數傳入Action,然後在Action引用介面物件裡面的方法。 Spri

android開發xml檔案中總是提示某一個錯誤修改後仍然提示。

       哎,剛開始學android開發,開發環境好不容易搭建好,自己寫程式碼的時候難免犯錯,特別是xml編寫時如果出現了程式碼錯誤,錯誤提示會一直存在,即使修改了也存在,關掉專案重新開啟也存在,關掉Eclipse 重新啟動還存在。。。。糾結了 有沒有

使用spring整合mybatis通過spring載入的mapper操作怎麼回滾

1 錯誤程式碼:     try{     ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");  

Spring Boot 整合Mybatismapper一直無法注入

今天在使用spring boot整合mybatis時一直無法注入mapper,不管怎麼配置註解掃描包等,都不行,移動了Application這個類也不行。後來發現了應該不是Spring Boot掃描包的問題,因為我不管怎麼配置,改程式碼除錯都會報那個錯,於是去pom.xml檔

關於Keil uVision V4.73開發如何將C語言的全域性變數高亮顯示

        當前在公司開發一個微控制器程式,原程式是其他同事寫的,我只是負責維護和後期開發。所以需要先看懂別人的程式碼,工程裡面聲明瞭很多全域性變數,懂C語言程式碼的都知道,全域性變數將多個函式模組串聯起來,如果不顯式標註(參考匈牙利命名法,變數名首字元為“g”),看起來

Pythonmatlab混編遇到問題:ImportError: No module named matlab.engine"的解決方法

前言:在做模型訓練的時候,import matlab.engine時,會出現bug:“ImportError: No module named matlab.engine”。針對這個問題,我將解決方法總結如下,便於學習交流~ 注意事項:目前瞭解到,matlab支援的版本為2

NX二次開發-UFUNNXOpen結合開發中Tag_t物件與TaggedObject物件轉換方法

本文通過舉四個例子來告訴大家在NX二次開發過程中會經常用到UFUN和NXOpen結合去開發,在UFUN中我們得到的是Tag_t物件,在NXOpen中得到的是TaggedObject物件,這兩個是需要進行轉換的。本文主要知識點為:TaggedObject->

MS整合錯誤Property 'driverClassName' threw exception;Error creating bean with name 'sqlSes。。。

Mybatis和Spring整合的時. applicationcontext.xml如下: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframew

在當java有多個jar包多個檔案如何在控制檯編譯執行

編譯 javac -cp .:/root/java/hash2/lib/mysql-connector-java-5.1.35-bin.jar:/root/java/hash2/lib/c3p0-0.9.1.1.jar *.java   執行 java -cp .:

laravel 本地整合開發環境路由訪問The requested URL /welcome was not found on this server.

問題描述:新增根目錄以外的其他路徑無法訪問,提示: The requested URL /welcome was not found on this server. 經過搜尋找到問題根源,和使用的本地整合開發環境有關,在一下網址找到解決辦法,但具體原理不太清楚。 按照下