Attribute | Description |
id | è¡¨æ ¼çš„ID(å¿…é¡») |
items | 对象或者Map的集å?(å¿…é¡») |
caption | è¡¨æ ¼çš„æ ‡é¢? |
theme | è¡¨æ ¼çš„ä¸»é¢?è‡ªå®šä¹‰æ ·å¼?br> |
exportTypes | 使用逗å·åˆ†å‰²å¯¼å‡ºçš„ç±»åž?ç›®å‰æ”¯æŒå¯¼å‡º¾cÕdž‹æœ‰CSV,Excel |
width | è¡¨æ ¼å®½åº¦ |
style | 匙¡¨æ ¼çš„Style属æ€?br> |
styleClass | 使用的Cssçš„Classåå— |
border | è¡¨æ ¼å®?br> |
cellpadding | è¡¨æ ¼å±žæ€?br> |
cellspacing | è¡¨æ ¼å±žæ€?br> |
Attribute | Description |
highlighter | 是å¦é«˜äº®æ˜„¡¤º |
onclick | 点击事äšg |
onmouseout | é¼ æ ‡¿UÕd‡ºäº‹äšg |
onmouseover | é¼ æ ‡¿UÕd…¥äº‹äšg |
Attribute | Description |
property | Java对象或Map的属性å |
title | 列的åç§° |
filterable | 是å¦å¯æŒ‰˜q‡æ×oæ¡äšg查找 |
sortable | 是å¦è¦æŽ’åº?br> |
width | 列宽 |
style | Style属�br> |
styleClass | 使用的Cssçš„Classçš„åå?br> |
实现拦截功能的类有:
一ã€MainInteceptoråQŒä¸»æ‹¦æˆªå™¨ï¼Œæ‰€ä»¥DWR的远½E‹è°ƒç”¨éƒ½ä¼šè¢«æ‹¦æˆªåQŒå½“ç„Óž¼Œ 调用是细到方法çñ”的,å¯é…¾|®çš„åQŒè¯¥¾cÕd®žçŽîCº†Spring AOPçš„MethodBeforeAdvice接å£åQŒè¯¥¾cÀLœ‰ä¸€ä¸ªé›†åˆæˆå‘˜å˜é‡ï¼Œæˆå‘˜ä¸ºIInteceptorã€?/font>
二ã€IInteceptoråQŒæ˜¯ä¸€ä¸ªæŽ¥å£ï¼Œä»…有一个execute(AopContext context)å‡½æ•°ã€‚è¯¥æŽ¥å£æ˜¯æ‹¦æˆªå™¨åQˆä¸Žå‰é¢çš„主拦截器ä¸åŒï¼Œæœ¬æŽ¥å£å®šä¹‰çš„æ‹¦æˆªå™¨æ˜¯å¯ä»¥ç”Þq”¨æˆ·åŽ»å®žçŽ°åQŒåƈ且å¯ä»¥æœ‰å¤šä¸ªåQ‰ã€‚实现接å£åªéœ€è¦å®žçŽ°æ–¹æ³•ã€‚è¿™äº?拦截器会被主拦截器回调ã€?比如è¦å®žçŽîC¸€ä¸ªèín份验è¯çš„æ‹¦æˆªåQŒSecuityInteceptoråQŒåœ¨é…置文äšgä¸æŠŠ˜q™ä¸ªæ‹¦æˆªå™¨è®¾¾|®äØ“ä¸ÀL‹¦æˆªå™¨çš„属性å³å¯èŽ·å¾—å›žè°ƒã€?/font>
三ã€AopContextåQŒAop上下文。在ä¸ÀL‹¦æˆªå™¨è°ƒç”¨IInteceptor的对象时åQŒæŠŠ˜q™ä¸ªä¸Šä¸‹æ–‡å¯¹è±¡ä½œä¸ºå‚æ•°æ¥è°ƒç”¨å拦截器。从该上下文å¯è޷得䏀¾pÕdˆ—ä¿¡æ¯åQŒå¦‚HttpSessionåQŒHttpRequest½{‰ã€‚ç”šè‡³ä½ å¯ä»¥è‡ªå·²è®„¡½®å±žæ€§ã€?nbsp;
下é¢çœ‹ä¸€äº›ä»£ç 片æ–?
MainInteceptor:
private List<IInterceptor> interceptors;//定义一¾pÕdˆ—çš„åæ‹¦æˆªå™?/font>
public void setInterceptors(List<IInterceptor> interceptors) {
this.interceptors = interceptors;
}
在before(Method method, Object[] params, Object target)æ–ÒŽ³•里:
WebContext ctx = WebContextFactory.get();//唯一被DWR污染的地�br /> HttpSession session = ctx.getSession();
AopContext context = new AopContext(); context.setSession(session);
for(Iterator it = interceptors.iterator(); it.hasNext();){
IInterceptor interceptor = (IInterceptor) it.next();
interceptor.execute(context);
}
IInterceptoråQ?/font>
public interface IInterceptor {
public void execute(AopContext context);
}
AopContextž®×ƒ¸å¿…脓出æ¥äº†ï¼Œ éšè‡ªå·²å®šä¹‰äº›ä»€ä¹ˆå±žæ€§ï¼Œä¸è¿‡ž®±å†…¾|®äº†ä¸€ä¸ªMapåQŒç”¨æ¥ä¿å˜æ•°æ®çŞ了ã€?/font>
䏋颿¥çœ‹çœ‹é…¾|®æ–‡ä»Óž¼š
<beans>
<!--ž®†è¦æš´éœ²¾l™DWRçš„Service-->
<bean id="bookManager" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces">
<value>net.jf.ajax.business.BookManager</value>
</property>
<property name="target">
<ref local="bookManagerImpl"/>
</property>
<property name="interceptorNames">
<list>
<value>dwrAdvisor</value>
</list>
</property>
</bean>
<bean id="bookManagerImpl" class="net.jf.ajax.business.impl.BookManagerImpl"/>
<!--装é…å™¨ï¼Ÿå¦‚æžœçœ‹ä¸æ‡‚,先看看Springçš„Aopå?åQšP-->
<bean id="dwrAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
<property name="advice">
<ref local="dwrInterceptor"/>
</property>
<property name="patterns">
<list>
<value>.*.*</value>
</list>
</property>
</bean>
<!--ä¸ÀL‹¦æˆªå™¨åQŒç»™å®ƒè®¾¾|®å拦截å™?->
<bean id="dwrInterceptor" class="net.jf.ajax.iterceptor.MainInterceptor">
<property name="interceptors">
<list>
<ref bean="test"/>
</list>
</property>
</bean>
<!--å…¶ä¸ä¸€ä¸ªå拦截器的实现-->
<bean id="test" class="net.jf.ajax.iterceptor.TestInterceptor"/>
</beans>
ž®?˜q™æ ·åQŒåœ¨é…ç½®DWR的酾|®æ–‡ä»¶æ—¶åQŒé…¾|?lt;creator>æ—¶ä‹É用Springçš„Creatorž®±å¯ä»¥ç›´æŽ¥ä‹É用上é¢çš„Service了。当 DWR˜qœç¨‹è¯äh±‚æ—Óž¼Œåœ¨é…¾|®èŒƒå›´å†…的方法的调用都会被主拦截器拦截,òq¶ä¸”éåŽ†ã€æ‰§è¡Œæ‰€æœ‰å拦截器。原有的Serviceä¸éœ€è¦æ”¹åŠ¨ï¼Œåªéœ€è¦å¤šåР䏀ä¸?Spring的酾|®æ–‡ä»Óž¼Œž®†åŽŸæœ‰çš„Serviceå†åР䏀层Aop的轻¾U±ã€?/font>
˜q™æ˜¯ä¸€¿U实现方法。如果有别的æ–ÒŽ³•让DWRæ›´å®‰å…¨ã€æœ‰æ•ˆï¼Œè¯·ä¸€å®šå‘ŠçŸ¥ã€‚:åQ?
其丙åµé¢çš„ç¼–ç æ˜¯å†›_®šæ€§çš„å› ç´ ã€‚ä¸¤è€…ä¸€è‡´æ˜¯åQŒæµè§ˆå™¨ä¼šæ£å¸¸æ˜¾½Cºå†…容,å¦åˆ™æœ‰å¯èƒ½äñ”ç”ŸäØ•ç 现åƒã€?/font>
如果一个Htmlæ–‡äšgåQŒæ–‡ä»¶ç¼–ç 䨓UTF-8。contentTypeè®¾äØ“ç›¸åŒã€‚则使用IE或Firefox查看åQŒä¸¤è€…都会自动选择æ£ç¡®çš„ç¼–ç åÅžå¼æ¥è§£é‡Šã€‚当我将contentTypeè®¾äØ“GB2312åQŒä»¥ä¸ÞZ¼šé€ æˆä¹Þq åQŒç»“æžœä¸ä¼šã€‚æˆ‘è®¤äØ“åŽŸå› æ˜¯è¿™æ ïLš„åQšæ–‡ä»¶ç¼–ç è“v军_®šä½œç”¨åQŒåŠ ä¸ŠUtf-8包括了GB该有的嗽W¦ï¼Œæ‰€ä»¥è¿™¿U情冉|˜¯ä»¥å¤§çš„æ¥è®¤è¯†ž®çš„。没问题。(ä¸çŸ¥æ˜¯å¦æœ‰ç†è§£é”™è¯? åQšPåQ‰ã€?/font>
上述情况ä¸ÞZ‹É用æµè§ˆå™¨ç›´æŽ¥æŠŠå¼€¾|‘页文äšg的结果。当我ä‹É用Webworkçš„Actionæ—Óž¼Œž®†Htmlæ–‡äšgä½œäØ“¾l“æžœæ—Óž¼ˆ¾l“æžœ¾cÕdž‹ä¸ºdispatcheråQ‰ï¼Œä¹Þq å‡ºçŽ°äº†ï¼æ–‡äšg¾~–ç 为UTF-8åQŒé¡µé¢å®šä¹‰çš„ContentType为UTF-8。但是ååä‹É用IEåŠFireFoxå‡å¾—åˆîCØ•ç çš„¾l“果。éƒé—·ä¸ç”¨Firefox查看了页é¢çš„属性,惊奇地å‘现页é¢ç¼–ç 居然是GB2312。我猜想是Webwork在Dispatch™åµé¢çš„æ—¶å€™ä‹É用了默认的编ç ,把本æ¥UTF-8¾~–ç 的页é¢é‡æ–°ç”¨GB2312¾~–ç 一‹Æ¡ã€‚于是试ç€åœ¨Action里é¢èŽ·å¾—Responseòq¶æŠŠå—符¾~–ç æ”¹äØ“UTF-8。最åŽå‘现结果ä¾ç„¶ä¸€æ —÷€‚è¿™æ—Óž¼Œæˆ‘觉得在Action完æˆåŽï¼ŒWebwork接下æ¥ä‹É用了ResponseåQŒæˆ‘的设¾|®è¢«é‡ç½®äº†ã€‚于是决定自已写一个ServletåQŒæŒ‡å®šå—½W¦ç¼–ç 䨓UTF-8åQŒç»“果直接Forward到我的Html™åµé¢ã€‚结果棼‹®äº†åQ冿Ÿ¥çœ‹™åµé¢ä¿¡æ¯åQŒä¸¤è€…都是UTF-8了ã€?br />
òqÏx—¶ä½¿ç”¨Webworkæ¥Dispatch的都是JspåQŒä¸æ›‘Ö‡ºçŽ°è¿‡˜q™æ ·çš„æƒ…å†üc€‚åŽŸå› æ˜¯Jspä»éœ€è¦ç¼–译,¾~–译时会è¯Õd–Jsp™åµé¢æŒ‡å®šçš„ContentTypeæ¥å†³å®šResponse里的å—符¾~–ç 。HTMLæ–‡äšg则ä¸ä¸€æ —÷€‚这时åªèƒ½ä‹É用默认编ç 。如果我的工½E‹æ˜¯Gb2312åQŒé‚£æ ÒŽœ¬ž®×ƒ¸å˜åœ¨åˆšæ‰æ‰€è®²çš„问题的ã€?/font>