欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
Struts2(Webwork2)一些實(shí)戰開(kāi)發(fā)技巧

一. 使用反射動(dòng)態(tài)取出 Pojo 的屬性

這一招在一些特殊的場(chǎng)合下非常管用.比如說(shuō),用戶(hù)在第一個(gè)頁(yè)面,選擇了某個(gè)實(shí)體其中要顯示出來(lái)的幾個(gè)屬性,那個(gè)這個(gè)時(shí)候用反射是非常不錯的選擇,少了大量 if 語(yǔ)句:

 

Java代碼
  1. package com.leo.util;   
  2.   
  3. import java.lang.reflect.Method;   
  4.   
  5. public class HelloWorldBean {   
  6.   
  7.     private String word;   
  8.   
  9.     private String name;   
  10.   
  11.     public String getName() {   
  12.         return name;   
  13.     }   
  14.   
  15.     public void setName(String name) {   
  16.         this.name = name;   
  17.     }   
  18.   
  19.     public String getWord() {   
  20.         return word;   
  21.     }   
  22.   
  23.     public void setWord(String word) {   
  24.         this.word = word;   
  25.     }   
  26.   
  27.     public HelloWorldBean() {   
  28.         name = "superleo";   
  29.         word = "Hello World!!!";   
  30.     }   
  31.   
  32.     public String getProperty(String name) throws Exception {   
  33.         if (name != null && !name.equals("")) {   
  34.             Character ch = name.charAt(0);   
  35.             name = Character.toUpperCase(ch) + name.substring(1, name.length());   
  36.             Class cls = Class.forName("com.leo.util.HelloWorldBean");   
  37.             Method meth = cls.getMethod("get" + name, null);   
  38.             Object retobj = meth.invoke(thisnull);   
  39.             return (String) retobj;   
  40.   
  41.         }   
  42.         throw new RuntimeException();   
  43.     }   
  44.   
  45.     public static void main(String[] args) throws Exception {   
  46.         HelloWorldBean bean = new HelloWorldBean();   
  47.         bean.setName("superleo");   
  48.         bean.setWord("name");   
  49.         System.out.println(bean.getProperty("name"));   
  50.         System.out.println(bean.getProperty("word"));   
  51.     }   
  52.   
  53. }  

 

 

OK ,假設我們在 HelloAction 使用了這個(gè) HelloWorldBean ,并且運行后,跳轉到相應頁(yè)面,你可以這樣去取 HelloWorldBean word name 屬性了:

 

Html代碼
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2. <%@ taglib prefix="s" uri="/struts-tags"%>  
  3. <html>  
  4.     <body>  
  5.         <h3>  
  6.             正常方法:<s:property value="helloWorld.name" /> <br />  
  7.             <s:property value="helloWorld.word" /> <br />  
  8.             反射方法:<s:property value="helloWorld.getProperty('name')" /> <br />  
  9.             <s:property value="helloWorld.getProperty('word')" />  
  10.         </h3>  
  11.     </body>  
  12. </html>  

 

 

對于公共屬性,還可以將此方法移到父類(lèi)。

 

 

 

二. iterator 迭代 Map 對象

 

 

這對顯示 Hibernate 多表連接的查詢(xún)結果非常管用。

 

以前,在使用 Hibernate 的時(shí)候,因為涉及到多個(gè)表查詢(xún)是很普遍的,每個(gè)表取一些字段,想顯示在頁(yè)面,比較好的辦法是新建一個(gè) VO 對象,專(zhuān)門(mén)用來(lái)顯示查詢(xún)的結果.但缺點(diǎn)就是,如果這樣的查詢(xún)很多, VO 類(lèi)會(huì )越來(lái)越多(如果不斷的往一個(gè) VO 增加字段的話(huà),那么這個(gè) VO 也越來(lái)越大,構造函數會(huì )特別夸張),咱們來(lái)看一個(gè)例子:

 

Java代碼
  1. List list = session.createQuery("select new MyVO(a.name, b.name, c.id) from .....").list();  

 

 

這樣返回的 List 直接就可以在頁(yè)面上用 iterator 標簽迭代了,但假如現在要取 10 呢?不僅 HQL 語(yǔ)句要修改,而且 MyVO 也要修改.下面是一種更好的做法:

 

Java代碼
  1. List list = session.createQuery("select new Map(a.name as fristName, b.name as secondName, c.id as id from .....").list();  

 

 

這里改用 Map 了,注意每個(gè)屬性都用“ as ”重新啟了一個(gè)別名,這個(gè)非常重要,否則在頁(yè)面顯示時(shí),很費勁.

 

現在來(lái)看頁(yè)面調用代碼:

 

Html代碼
  1. <s:iterator value="list" id="maps">  
  2.       <tr class="row1">  
  3.       <input type="checkbox" name="ids" value="<s:property value="#maps.get('id')" />/>  
  4.       <td align="center"><s:property value="#maps.get('fristName')" /></td>  
  5.       <td align="center"><s:property value="#maps.get('secondName')" /></td>  
  6.     </tr>  
  7.     </s:iterator>  
 

 

 

注意上面的頁(yè)面中 Map 的取值就是當時(shí) hql 語(yǔ)句中“ as ”后的別名.

雖然相對于以往的 JSTL 來(lái)說(shuō),要寫(xiě)的標簽代碼更多了,但強大的 OGNL 表達式也讓你在視圖層擁有更強大的靈活性與擴展性.

 

順序無(wú)關(guān),如果你使用了 select new List(...) 也能達到類(lèi)似效果,但因為 List 是有序的,所以在頁(yè)面顯示非常不靈活,不推薦使用.

 

 

三. if 標簽判斷漢字問(wèn)題

 

這個(gè)問(wèn)題具體原因不明,先看下面一段代碼:

Java代碼
  1. <s:if test="user.name == '程序'">   
  2. ...  

 

這樣就算 user.name 等于“程序”也是無(wú)法通過(guò)的,需要修改成以下代碼:

Html代碼
  1. <s:if test="user.name == \'程序\'">  
  2. ...  

 

 

如果“程序”是你系統的一個(gè)常量,更推薦的作法是:

Html代碼
  1. <s:if test="user.name == @com.leo.util.Constants@TYPE ">  
  2. ...  
 

我不知道原因是不是因為版本問(wèn)題?希望有知道的,回復一下.

 

 

四. iterator 雙重循環(huán)

 

這個(gè)也很常用,相信很多人都輕車(chē)熟路,那我們來(lái)回顧一下。假設 lists 裝的都是 Group 對象, Group 持有一個(gè) List<User> 那個(gè)我們接下來(lái)可以:

Html代碼
  1. <ww:iterator value="lists" id="top">  
  2. <ww:iterator value="users" id="sub">  
  3. 組名:<s:property value="#top.name" />,成員名:<s:property value="#sub.name" />  
  4. </ww:iterator>  
  5.   應該組總數:<s:property value="users.size" />  
  6. </ww:iterator>  

 

 

上面的寫(xiě)法有很多種,但效果都是一樣的,有興趣可以多看看 OGNL 。

 

 

還有一些沒(méi)有及時(shí)整理好,下次統一再給大家分享一下.

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
SSH實(shí)現的增刪改查實(shí)例
Struts2 標簽庫 [Tablib] (轉) - 蘭色的海洋 - 51CTO技術(shù)博客
Struts2中s:iterator標簽的使用詳解
jsp標簽jsp:setProperty用法
spring總結
struts 2 監聽(tīng)器
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久