為解和前篇一樣的問題,置換的內容除了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...
沒有留言:
張貼留言