程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 基於struts的web應用開發總結(一)

基於struts的web應用開發總結(一)

編輯:關於JAVA

以前經常寫的代碼,過一了段時間再寫發現了一些問題,說明了自己對代碼的理解不夠。總結如下:

一:

編輯某一條記錄,點擊“編輯”按鈕,當打開的是一個新的頁面(如模態框)時,想到記錄的ID傳到打開的頁面去。因為打開的頁面與原來操作的頁面不是同一個window,所以當執行點擊“編輯”按鈕操作時,沒辦法把值賦給打開的頁面的元素(如隱藏元素)。如:

$("PHONE_LIST_ID").value = phone_list_id//這種作法是不行的,取不到$("PHONE_LIST_ID"),因為操作的頁面與$("PHONE_LIST_ID")所在的頁面不是同一個頁面。

這時,可以用URL參數傳遞的方法,如下:

Js代碼

url = "/epub_web/jsp/phone_list_mgr/get_classify_phone.do?PHONE_LIST_ID="+serial_num;
 window.showModalDialog(url,'',"dialogWidth=600px;dialogHeight=400px");

在打開的JSP頁面裡用:value="<%=request.getParameter("PHONE_LIST_ID")%>",如下:

Html代碼

<input type="hidden" name="PHONE_LIST_ID" id="PHONE_LIST_ID" value="<%=request.getParameter("PHONE_LIST_ID")%>"></input>

所以,通過url參數傳遞的方式,可以實現跨頁面的參數傳遞,而不用用隱藏域來傳遞。這在跨頁面的參數傳遞中,特別是類似於對記錄的編輯操作等,可以很好地適用.

二:

上面第一點的:

<input type="hidden" name="PHONE_LIST_ID" id="PHONE_LIST_ID" value="<%=request.getParameter("PHONE_LIST_ID")%>"></input>

這行代碼我原來是用<html:hidden>,如下:

<html:hidden property="PHONE_LIST_ID" value="<%=request.getParameter("PHONE_LIST_ID")%>"/>

因為我本機是在jboss的環境,但是當拿到webspheer的環境下卻有提示錯誤,以前好像就有發現這個情況,也不知道是為什麼,先記錄下來。

三:

由於粗心,在xml配置時,<action path="" type="" name="" scope="" parameter=""></action>中把name=""這個屬性漏掉了,所以程序跑起來時,在servlet端的ActionForm老是提示為null,這發了一些時間。以後有時間的時候好好弄清楚struts的配置的屬性的作用。

四:

在servlet端,用struts的ActionForm自帶的get和set方法時,發現前台沒有set成功。後來查了很久才知道,前台沒有用struts自帶的html標簽,如<hmtl:text>我就直接用<input type="text"/>,所以struts認不到,在action端用set方法當然前台沒有反應了。以前也遇到過這些問題,時間一久就忘了,所以還是需要做些記錄。

五:

數據庫裡字段用char與varchar2不同,有些人喜歡用char,比如用char(2),如果值是'1'的話,那麼在數據庫裡後面還有個空格。所以,當在action端用set方法時並沒有得到我們想要的結果,出現這種

情況時,有如下幾種解決方法

1.一是設計數據庫的人只有在確定值是確定位數時才用char,否則都用varchar2。

2.二是在寫sql語句時用trim()方法來截掉空格。

3.三是在取到有空格數據時用substr來處理。

六:

關於checkbox,一般我們都是用一個name來構成一個checkbox數組,這樣因為是一個數組,每次就只能選中一個值。一般用循環來處理每個checkbox元素,如下:

Js代碼

function getRadioValue(objRadio){
      var resultValue;
      var j = objRadio.length;
      for(var i=0;i<j; i++){
        if(objRadio[i].checked) resultValue = objRadio[i].value;
      }
      return resultValue;
    }
    function isChecked(radioObj){
      resultChecked = false;
      for(var i=0;i<radioObj.length;i++){
        if(radioObj[i].checked){
          resultChecked = true;
          break;//這裡是break退出循環並繼續往下執行,而不是return。
        }
      }
      return resultChecked;
    }

七:

很經常,我們需要多個引號來構造,這些引號可能嵌套,這種寫法很容易很錯。注意以下幾點:

1.可以適當地把一些拿出來構成一個函數來引用,引用可以減少引號的使用。

2.單引號裡面可以用多引號,同樣,多引號裡面也可以用單引號,而不需要轉義。

3.轉義符可以一直嵌套下去,比如\\"\\"需要嵌套的時候可以\\\"...\\\"。

4.可以用&quot;來代替引號。

例子如:

Js代碼

document.write("<span  style=\"width:100;background-color:yellow\"  onclick=alert("test")  onmouseover='status=\"abcd\\\"defg\\\"hijk\"'>test</span><br>");

八:

jsp端與action端交互,常常用如下方法:

(1).前台發送一個ajax請求,後台處理請求後返回一個jsp頁面,前台用得到的jsp頁面的html代碼賦值給需要顯示的元素,如div等。如:

Js代碼

pars = "ENGAGE_INFO_ID="+$F("ENGAGE_INFO")+"&ENGAGE_DTS_IDLIST="+projCommJs.getCheckboxValue();
    new Ajax.Request(this.modulePath+"addtoInfo.do",{
      parameters:pars,
      onCreate:function(){
      },
       onComplete:function(returnStr){
$("Engagediv").innerHTML = returnStr.responseText;
         $("btnRefresh").fireEvent("onclick");
       }
     }
    );

(2).前台發送一個ajax請求,後台處理請求後並不是返回一個jsp頁面,而是構造一個html代碼,再把這個html代碼發送到前台。

Java代碼

public static void responseText(HttpServletResponse res, String s){
    //指定內容類型
    res.setContentType("text/html;charset=GBK");
    //禁止緩存
    res.setHeader("Pragma","No-cache");
     res.setHeader("Cache-Control","no-cache");
     res.setDateHeader("Expires", 0);
    try {
      PrintWriter out = res.getWriter();
      out.print(s);
      out.close();
    }
    catch (IOException e) {
      e.printStackTrace();
    }
  }

3).前台發送請求,後台把需要在前台顯示的值放在request或session中,前台可以用標准的jsp標簽或自定義標簽來分析request或session中的值來進行顯示。這部分的內容可以看看書jsp與servlet的書,如:oreilly.JSP設計第二版等書。

九:

在前台發送ajax請求時,參數如果是一個表單,表單裡有很多的元素,這時候不需要一個個去寫,可以用Form.serialize(),如下:

Js代碼

var pars = encodeURI(Form.serialize(document.forms[0]));

用這種方式傳遞到action端後,因為參數是經過編碼的,所以,在action端需要解碼,而不能只是能過request.getParameter()來取值。(如果前台是如form.submit()或是沒有編碼的參數傳遞過來就不需要),要不然漢字會是亂碼。如下:

Java代碼

private String urlDecode(String str) throws Exception{
    try{
      str = java.net.URLDecoder.decode(str, "UTF-8");
    }catch (Exception ex){
      System.out.println(ex.getMessage());
      ex.printStackTrace();
    }
    return str;
  }

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved