不厭其煩

Reder’s Blog, experimental version

Archive for 七月 2008

在 JSTL 中取用 Java constants

leave a comment »

以下程式碼來自討論串中。

在 Java 中,我們會使用 public static final String A_CONST  = "const"; 的方式設定常數,但在 JSTL 中無法直接取用。以下是解決方法:

  1. 由於 JSTL 可以取得 Map 或 JavaBean 的值,所以我們可以利用這個特性,建立一個 Class 繼承 HashMap 。然後用 relection 將其中的 fields 放入 Map 中。
    package com.utils;
    
    import java.lang.reflect.Field;
    import java.lang.reflect.Modifier;
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * Class to reveal java constants to JSTL Expression Language
     * Uses reflection to scan the declared fields of a Constants class
     * Adds these fields to the Map.
     * Map is unmodifiable after initialization.
     *
     */
    public class JSTLConstants extends HashMap {
    	private boolean initialised = false;
    
    	public JSTLConstants() {
    		Class c = this.getClass();
    		Field[] fields = c.getDeclaredFields();
    		for (int i = 0; i < fields.length; i++) {
    
    			Field field = fields[i];
    			int modifier = field.getModifiers();
    			if (Modifier.isFinal(modifier) && !Modifier.isPrivate(modifier))
    				try {
    					this.put(field.getName(), field.get(this));
    				}
    				catch (IllegalAccessException e) {}
    		}
    		initialised = true;
    	}
    
    	public void clear() {
    		if (!initialised)
    			super.clear();
    		else
    			throw new UnsupportedOperationException("Cannot modify this map");
    	}
    
    	public Object put(Object key, Object value) {
    		if (!initialised)
    			return super.put(key, value);
    		else
    			throw new UnsupportedOperationException("Cannot modify this map");
    	}
    
    	public void putAll(Map m) {
    		if (!initialised)
    			super.putAll(m);
    		else
    			throw new UnsupportedOperationException("Cannot modify this map");
    	}
    
    	public Object remove(Object key) {
    		if (!initialised)
    			return super.remove(key);
    		else
    			throw new UnsupportedOperationException("Cannot modify this map");
    	}
    }
    
  2. 然後我們的 Constants Class 再繼承上面的 Class:
    package com.utils;
    
    import java.util.*;
    public class JSTLConstantsTest extends JSTLConstants {
    
    	public static final String name = "Evnafets";
    	public static final int age = 28;
    	private static final String bad = "bad";
    	public static final String programmingSkill = "Awesome";
    	public static final String[] daysOfTheWeek = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun" };
    	public int temp = 100;
    
    	public static void main(String[] args) {
    		Map m = new JSTLConstantsTest();
    
    		System.out.println("Tee constants are ");
    		for (Iterator it = m.entrySet().iterator(); it.hasNext();) {
    			Map.Entry me = (Map.Entry) it.next();
    			System.out.println(me.getKey() + " = " + me.getValue());
    		}
    	}
    }
    
  3. 那麼在 JSP 頁面上我們就可以這樣取用:
    <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
    <jsp:useBean id="Constants" class="com.utils.JSTLConstantsTest"/>
    <c:out value="${Constants.name}"/>
    <c:out value="${Constants.age}"/>
    <c:forEach var="day" items="${Constants.daysOfTheWeek}">
      <c:out value="${day}"/>
    </c:forEach>
    

在討論串中另有針對無法繼承的 Interface 或 third party class 的改進法,但基本上我想我個人應該用不到,所以就不整理了。

作者為Reder

07/31/2008 at 3:09 下午

張貼於Java

標籤 , ,

濁水溪公社 @ 野台開唱

有一則留言

天啊,真是好歡樂。最後一次的圓山野台,還是沒去,想來是有點遺憾。不過 PTT LTK 版有人分享他們的表演影片(因為原 po 說要低調,所以我就附上文章連結吧: http://www.ptt.cc/bbs/LTK/M.1217064689.A.2CA.html想要連回原 po 大失敗,網路上另有人po),一點一點下載來看看。

posterous 新支援發文到一般部落格(一些知名的 blog hosting platform 還有 Tumblr),所以沒有意外的話這是第一篇 cross post ,就試試看效果如何吧。:)

作者為Reder

07/30/2008 at 9:07 下午

張貼於life & fun

標籤 ,

Posterous–輕量型的部落格平台

leave a comment »

posterous_logo

posterous是我最近在玩的網站。它其實很類似其他的部落格平台,可以說是輕量的部落格平台。表面上看起來和其他的部落格平台沒什麼不同,但是在發表上的一些地方讓我覺得很棒。

  • posterous 和 email 整合的很好。所以,你只要會用 email ,你就會寫 posterous 部落格了。
  • posterous 不用註冊。你只要寄信到 post @ posterous.com ,他就會幫你開一個新的帳號和建立好你的部落格。部落格預設的網址(我猜,因為我很在意網址所以我用註冊的方式)就是 http://你的帳號.posterous.com 。你的帳號就是你 email 中 @ 前面的部份。
  • posterous 會幫你做基本的格式轉換。email 中的換行都是有效的。也會幫你把網址轉成可連結。

接下來是 posterous 我最欣賞的地方。

posterous 會自動將你 email 中的附加檔案轉成可以在網頁上直接瀏覽的形式。 posterous 目前支援下列檔案類型:

posterous-filetypes

posterous 支援的檔案類型

至於轉成什麼樣呢?就要到 posterous 的 faq 看一下。基本上來說,Office 檔它會用一個線上服務 Scribd 來顯示,讓你可以不用下載就可以做簡單瀏覽。圖片檔如果單張會直接顯示,但多張的話會做成像相簿一樣,讚!而 mp3 檔則會有一個簡易的 flash 播放器。而以上這些檔案都是可以下載的,所以要和朋友分享也非常方便。(當然也可以選擇不開放下載)

此外,一些國外知名的影片分享網站如 Youtube, Vimeo 等等,你只要直接貼上你在網址列中看到的那一段,如:http://www.youtube.com/watch?v=CB17uWuBrL0,它也會幫你變成可以播放的版本。有沒有很簡單?

另外,簡單的瀏覽人數統計還有支援留言機制(原先的 Tumblr 不支援)都令人覺得非常方便,網站更新的速度也蠻快速的,是個值得期待的服務。

想要輕鬆分享東西?想要讓你的阿媽也來寫部落格?用 posterous 就對了!

’08 7/23 updated: posterous 的新功能:在貼到 posterous 的同時發送到 Twitter 和 Flickr ,讓目前已經有 Twitter 和 Flickr 的人可以更輕易的善用 posterous 簡單的張貼型式,我覺得是很棒的進步。而且和目前服務的良好結合,讓人比較不會有平台取捨的問題。加分!

作者為Reder

07/21/2008 at 3:48 下午

為什麼我喜歡單欄式的佈景?

with 2 comments

更精確一點來說,應該是「現在的我為什麼喜歡單欄式的佈景?」

簡單的來說,就是沒有什麼要放的。所以我不需要多欄式的佈景來放東西。

另外一方面,我還在努力找回寫作感。

伍國柱對斷章的筆記,有一句話我一直記得:

我希望在「斷章」裡,舞動些希望,單純地透過舞蹈,和人說說話。

一個寫部落格的人,也必然會遇到這樣的問題,「為什麼要寫部落格?」如果這個理由還存在,就有繼續寫下去的動力。而我在某一天突然記不得這樣的原因,所以我停了下來。現在的我想著,也許就只是透過這個介面,和人說說話。

我可能不能要求很多,因為我的想法紛亂無主題,不帶太多實用價值。而越是受歡迎的話題我越是不想去寫,只因為有太多人會寫了。

但是如果只是單純的分享和說話,那麼我想可以的。就繼續一點點的記錄。不用太大的。


這篇應該只是個單純宣告,也許更應該貼在 posterous 上。只是 posterous 掛點,就先在這說了。視情況刪除。

作者為Reder

07/21/2008 at 1:33 上午

張貼於murmur

YouTube – 全家 飲料冰品 兩件恰恰好 TVCF 恰恰篇

有一則留言

來試試新的 WordPress Press this!

貼這支廣告的主要原因不是恰恰也不是全家兩件 6 折(事實上第二件六折和買兩件打八折一樣),而是這支廣告拍得還蠻專業的。

不管是請到了鐵嘴展元展現他一貫的播報風格,還是那外角高、inside out 的標準恰式打法,或者是比賽的整體感都給人專業的感覺。好廣告!

後記1:會這麼有感慨是因為棒球真的不是一個很簡單就可以拍出專業感的運動,看一些棒球日劇或是最近的九降風都會有這樣的感覺。

後記2 :沒想到全家這麼全力推恰恰!我家旁的全家門口就是立牌,飲料區也有好多恰恰在笑。真想推「小眼睛也是很有魅力的!」

作者為Reder

07/17/2008 at 9:09 下午

張貼於life & fun

標籤 , , ,

Follow

Get every new post delivered to your Inbox.