Struts1和jQuery越深研,學越多,狀況越多。最意外的是還有瀏覽器不相容的問題,原本在Google Chrome下可work的,到IE和FireFox便出錯,而且錯得都不一樣,馬的。IE問題出在CSS的問題,果如Java Script的大老道格拉斯在OSDC 2010說:IE 6 MUST DIE。我看IE8也…。
先列出解出和FireFox的問題。原來出在Struts的RequestProcessor的類別,我在JSP使用jQuery的$.ajax去做post,其url設定為/query.do,在Google Chrome裡,印出的Log是這樣:[RequestProcessor.java:161] : Processing a 'POST' for path '/query'。
而在FireFox的Log卻是:[RequestProcessor.java:681] : Invalid path was requested /jsp/permission/query。也就是在FireFox下,url事先加了目前的jsp的base path。目前只尋得治標方式。就是在struts_config.xml裡,除了設定/query的action之外,也設定/jsp/permission/query的action,而對映的Spring Bean也得追加相應的method,內容和@Bean(name="/query")一樣,只是變成@Bean(name="/jsp/permission/query"),而method name也要取不同名。希望下次找到治本方式,這個治標方式至少不必在前端程式加一堆瀏覽器的判斷。
2010/4/28:治本方式是設好Context定位給其它url使用。先在common.jsp設置如下,給其它jsp去include:
<%@ taglib uri="/WEB-INF/tld/jstl/c.tld" prefix="c" %> |
之後用到Ajax或是submit的URL,一律前綴此標籤:
$(function(){ |
$("#myForm").attr("action", '<c:out value="${ctx}"/>/query.do'); |
據Google結果,原因是FireFox 3.x版禁止cross domain存取,是故才會有/jsp/permission/query的url出現。本想用<html:base>在Client解決,但還是失敗。
接著再把link的css和引入的Java Script檔,其路徑都用這種方式前綴,終於能並用於IE8、FireFox3和Chrome 4。
留言列表