為了說清楚這個問題,必須從頭說起。
先從後台配置一個參數,放到一個欄位裡,該欄位叫做keywords,這個參數的值叫做efmis://|efmfj|username|2200|0||2014|http://10.20 .1.54:7001/cssServerportal222012/|||||02,姑且不去管這個值有什麼意義,相信很多人都遇過比這個更複雜的字串。後台配置以後,前台可以這麼來顯示:${tag_bean.keywords},可以肯定,無論後台配置成什麼,前台一定會原定不變的顯示出來,第一個問題出現:在username這個位置上,嵌入的是目前登入使用者的使用者名,必須是動態程式碼。難道要寫成efmis://|efmfj|${username}|2200|0||2014|http://10.20.1.54:7001/cssServerportal222012?這樣寫跟期望可有所不同,它會原樣不變的顯示出來,並不會把EL表達式翻譯成動態代碼,暫時不考慮能不能使用EL表達式的嵌套,很顯然不能直接使用,一定要處理這麼一個字串。
這個字串是要作為一個js方法的參數的,例如:
複製程式碼
程式碼如下:
[/#if] path="${c.path}" onclick= "clickClient(this.path,this.keywords);">
${c.name}
複製程式碼
程式碼如下:
clickClient = function(lick,,keys)> //解析分解keywords開始
keywords = keywords.replace("username","${user.username}");
var suffIndex=keywords.indexOf("http");
var prefix = keywords.substr(0,suffIndex-1);
var suffix = keywords.substr(suffIndex-1);
var preIndex=prefix.lastIndexOf("|") 1;
var year = prefix. substr(preIndex);
prefix = prefix.substr(0,preIndex);
//解析分解keywords結束
//合併url
keywords = prefix $("#year").val () suffix;
clientInvoke(path,keywords);
}
在這個方法,最終實現的目的是呼叫clientInvoke方法,而傳進去的參數keywords是變化,要經過一定的處理,先把${user.username}把user替換掉,在js程式碼中,即使含有EL表達式也會動態的解析出來,這點就實現了動態的呼叫目前使用者名稱的目標。當2014這個年度也要設定為動態的,而且是可以切換的,那就要把該字串分解成三個部分:
前綴:efmis://|efmfj|username|2200|0 ||
年度:2014
後綴:|http://10.20.1.54:7001/cssServerportal222012/|||||02
把年度放在一個年度放在一個select在下拉式選單中,當觸動clickClient方法時,即時的從當前option中取出年度,然後和前綴後綴拼接起來,這樣就是實現了年度可變更的靈活性。 複製程式碼
代碼如下:
年度切換
年度切換