2014年8月27日 星期三

繼承struts select tag 改label

為解和前篇一樣的問題,置換的內容除了property外,還有select。
所以只好再code一個select出來了~

原則上還是以原本架構為主體,但是把資料的model(就是selectTag裡的 list 內容換掉),因為又不能改bean/vo,就不能set回去...所以將以現成的request的setAttribute/getAttribute來放改過的資料~就不用動其他的程式

1. 繼承SelectTag
public class MySelecStrutsTag extends SelectTag  {

2. 定一個tag attribute來接原始資訊(即原本寫在list的那一項改到這邊來)
private String orginList = "";

3. override populateParams,別忘了super(它做了很多要set的東西),要偷換資料的內容就接在底下做
    public void populateParams() {       
        super.populateParams();

4. 先用 orginList 裡找出原值(fVal),改一改再塞回去(lst)
        String expr = ComponentUtils.stripExpressionIfAltSyntax(getStack(), this.orginList);
        Object fVal = this.findValue(expr);
       
        //......................
        String exprNew = ComponentUtils.stripExpressionIfAltSyntax(getStack(), this.list);
        getStack().getContext().put(exprNew, lst);

5. 前端要設定tld,除了自訂的attribute要加進去外,別忘了去找一下struts tld裡面的SelectTag,有一大串長落落的也attribute也要copy進去

6. 重起後就可以在jsp上面呼叫囉~因為是用request的attribute來暫存,所以tag attribute的寫法要寫成 list="#request.tmpData" ,#request表示調用request.getAttribute


過程是有點血淚..因為原本想要塞值回原bean,後來發現原本的那個bean沒做setter,再怎樣也擠不回去Orz...然後為了把值丟在struts能find的方式~也是把一堆setXXX全拿來試了一遍~\囧rz...
    
   

沒有留言: