
2006年5月18日
用dwr實現在表單存儲的功能,dwr與spring的結合使用上遇上了些問題,先把應用步驟記錄下來吧:
1.dwr.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" "
http://www.getahead.ltd.uk/dwr/dwr10.dtd
">
<dwr>
??? <allow>?????
??????? <create creator="spring" javascript="FormDataDwrUtil">???
?????? <param name="beanName" value="formDataDwrUtil"/> ???////配置成spring,會從spring中去找到這個bean
??????? </create>
?? </allow>?
??
<signatures>
? <![CDATA[
? import java.util.Map;?
? ]]>
</signatures>
</dwr>
2.applicationContext.xml 片段
<bean id="formDataDwrUtil" class="com.odp.web.dwr.FormDataDwrUtil">
??<property name="formInstanceDao">
????? <ref bean="formInstanceDao"/>
??? </property>
?</bean>
3.web.xml? 片段
?
<servlet>
??????? <servlet-name>context</servlet-name>
??????? <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
??????? <load-on-startup>1</load-on-startup>
? </servlet>
? <servlet>
??????? <servlet-name>dwr-invoker</servlet-name>
??????? <display-name>DWR Servlet</display-name>
??????? <description>Direct Web Remoter Servlet</description>
??????? <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
??????? <init-param>
??????????? <param-name>debug</param-name>
??????????? <param-value>true</param-value>
??????? </init-param>
??? </servlet>
?? <servlet-mapping>
??????? <servlet-name>dwr-invoker</servlet-name>
??????? <url-pattern>/dwr/*</url-pattern>
??? </servlet-mapping>
?? 4.jsp引用
<script type='text/javascript' src='<%=request.getContextPath()%>/dwr/interface/FormDataDwrUtil.js'></script>
<script type='text/javascript' src='<%=request.getContextPath()%>/dwr/engine.js'></script>
<script type='text/javascript' src='<%=request.getContextPath()%>/xx/js/dwr/util.js'></script>?
<!--將包中js直接拿出來用了, 做了一些修改以滿足實際需求-->
<script>
?? var formdata;
? function saveItem(){???
? ?DWRUtil.getMapValues(formdata);???? //將form表單中的數據組織成map賦給formdata
????FormDataDwrUtil.saveValues(aftersave, formdata);? ?? //調用java代碼存儲數據
? }?
? function aftersave(result){???????
//回調方法,顯示保存結果
???if( result? != null ){
? ??parent.setInstanceId(""+result);
? ??document.getElementById("msg").innerHTML = "<font color='red' size='2px'>保存成功!</font>";
? ??document.getElementById("save").style.display = "none";
? ??//document.getElementById("print").style.display="block";
? ??//document.getElementById("printpreview").style.display="block";
? ?}else{
? ??document.getElementById("msg").innerHTML = "<font color='red' size='2px'>保存失敗!</font>";
? ?}
? }
??
/**
?*? 根據參數找到指定的表單數據組織成map
*/
? function findItem(instanceId , tablename){??????????
??? DWRUtil.useLoadingMessage("loading.....");
? ?FormDataDwrUtil.getFormData(loadItem , instanceId , tablename);
? }
/**
*回調方法,將數據填充到表單中
*/
? function loadItem(pformdata){
??? formdata = pformdata;
? ?DWRUtil.setValues( pformdata );
?? }
?
ok,能正常使用,正常保存數據,加載數據了.
問題出現了,當我改變了應用中類,weblogic會自動重載,spring重新裝載數據、類,所有的東西都不受影響,dwr這里卻出了問題,錯誤如下:
???
java.lang.IllegalStateException: No WebApplicationContext found: no ContextLoade
rListener registered?
??????? at org.springframework.web.servlet.support.RequestContextUtils.getWebApp
licationContext(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletContext;)Lor
g/springframework/web/context/WebApplicationContext;(RequestContextUtils.java:83
)
??????? at uk.ltd.getahead.dwr.create.SpringCreator.getBeanFactory()Lorg/springf
ramework/beans/factory/BeanFactory;(SpringCreator.java:174)
??????? at uk.ltd.getahead.dwr.create.SpringCreator.getInstance()Ljava/lang/Obje
ct;(SpringCreator.java:131)
??????? at uk.ltd.getahead.dwr.create.SpringCreator.getType()Ljava/lang/Class;(S
pringCreator.java:104)
??????? at uk.ltd.getahead.dwr.impl.DefaultInterfaceProcessor.handle(Ljavax/serv
let/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V(DefaultIn
terfaceProcessor.java:69)
??????? at uk.ltd.getahead.dwr.impl.DefaultProcessor.handle(Ljavax/servlet/http/
HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V(DefaultProcessor.j
ava:77)
??????? at uk.ltd.getahead.dwr.AbstractDWRServlet.doPost(Ljavax/servlet/http/Htt
pServletRequest;Ljavax/servlet/http/HttpServletResponse;)V(AbstractDWRServlet.ja
va:162)
??????? at uk.ltd.getahead.dwr.AbstractDWRServlet.doGet(Ljavax/servlet/http/Http
ServletRequest;Ljavax/servlet/http/HttpServletResponse;)V(AbstractDWRServlet.jav
a:149)
??????? at javax.servlet.http.HttpServlet.service(Ljavax/servlet/http/HttpServle
tRequest;Ljavax/servlet/http/HttpServletResponse;)V(HttpServlet.java:740)
??????? at javax.servlet.http.HttpServlet.service(Ljavax/servlet/ServletRequest;
Ljavax/servlet/ServletResponse;)V(HttpServlet.java:853)
??????? at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run
()Ljava/lang/Object;(ServletStubImpl.java:1072)
??????? at weblogic.servlet.internal.ServletStubImpl.invokeServlet(Ljavax/servle
t/ServletRequest;Ljavax/servlet/ServletResponse;Lweblogic/servlet/internal/Filte
rChainImpl;)V(ServletStubImpl.java:465)
??????? at weblogic.servlet.internal.TailFilter.doFilter(Ljavax/servlet/ServletR
equest;Ljavax/servlet/ServletResponse;Ljavax/servlet/FilterChain;)V(TailFilter.j
ava:28)
??????? at weblogic.servlet.internal.FilterChainImpl.doFilter(Ljavax/servlet/Ser
vletRequest;Ljavax/servlet/ServletResponse;)V(FilterChainImpl.java:27)
??????? at com.matrixflow.client.RequestEncoderFilter.doFilter(Ljavax/servlet/Se
rvletRequest;Ljavax/servlet/ServletResponse;Ljavax/servlet/FilterChain;)V(Reques
tEncoderFilter.java:34)
??????? at weblogic.servlet.internal.FilterChainImpl.doFilter(Ljavax/servlet/Ser
vletRequest;Ljavax/servlet/ServletResponse;)V(FilterChainImpl.java:27)
??????? at weblogic.servlet.internal.WebAppServletContext$ServletInvocationActio
n.run()Ljava/lang/Object;(WebAppServletContext.java:6987)
??????? at weblogic.security.acl.internal.AuthenticatedSubject.doAs(Lweblogic/se
curity/subject/AbstractSubject;Ljava/security/PrivilegedAction;)Ljava/lang/Objec
t;(AuthenticatedSubject.java:321)
??????? at weblogic.security.service.SecurityManager.runAs(Lweblogic/security/ac
l/internal/AuthenticatedSubject;Lweblogic/security/acl/internal/AuthenticatedSub
ject;Ljava/security/PrivilegedAction;)Ljava/lang/Object;(SecurityManager.java:12
1)
??????? at weblogic.servlet.internal.WebAppServletContext.invokeServlet(Lweblogi
c/servlet/internal/ServletRequestImpl;Lweblogic/servlet/internal/ServletResponse
Impl;)V(WebAppServletContext.java:3892)
??????? at weblogic.servlet.internal.ServletRequestImpl.execute(Lweblogic/kernel
/ExecuteThread;)V(ServletRequestImpl.java:2766)
??????? at weblogic.kernel.ExecuteThread.execute(Lweblogic/kernel/ExecuteRequest
;)V(ExecuteThread.java:224)
??????? at weblogic.kernel.ExecuteThread.run()V(ExecuteThread.java:183)
??????? at java.lang.Thread.startThreadFromVM(Ljava/lang/Thread;)V(Unknown Sourc
e)
>
在web.xml? 片段里將下面這段改成Listener也不行,錯誤一樣
? <servlet>
??????? <servlet-name>context</servlet-name>
??????? <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
??????? <load-on-startup>1</load-on-startup>
? </servlet>
現在的解決方法是: 重啟weblogic? 這肯定不是解決的問題的根本。 希望能找到問題所在.......?
posted @
2006-06-16 17:51 簡易 閱讀(634) |
評論 (0) |
編輯 收藏
ajax dwr(direct web remoting)框架簡介
這個從JAVA到JavaScript的遠程功能方法給DWR的用戶帶來非常像傳統的RPC機制,就像RMI或者SOAP一樣,而且擁有運行在WEB上但是不需要瀏覽器插件的好處.
它包含兩個主要的部分:允許JavaScript從WEB服務器上一個遵循了AJAX原則的Servlet(小應用程序)中獲取數據.另外一方面一個JavaScript庫可以幫助網站開發人員輕松地利用獲取的數據來動態改變網頁的內容.
http://flyfish81225.blogchina.com/4098286.html?
http://getahead.ltd.uk/dwr/getstartedhttp://getahead.ltd.uk/dwr/getstarteddwr.xml
<!DOCTYPE dwr PUBLIC
"-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"
"http://www.getahead.ltd.uk/dwr/dwr10.dtd">
<dwr>
<allow>
<create creator="new" javascript="JDate">
<param name="class" value="java.util.Date"/>
</create>
<create creator="new" javascript="Demo">
<param name="class" value="your.java.Bean"/>
</create>
</allow>
</dwr>
defines what classes DWR can create and remote for use by Javascript
Bean類必須都有一個默認的無參構造器
DWR has a few restrictions:
- Avoid reserved JavaScript words
- Methods named after reserved words are automatically excluded. Most JavaScript reserved words are also Java reserved words, so you won't be having a method called "try()" anyway. However the most common gotcha is "delete()", which has special meaning from JavaScript but not Java.
- Overloaded methods can be involved in a bit of a lottery as to which gets called, so avoid overloaded methods.
?
posted @
2006-05-19 17:22 簡易 閱讀(213) |
評論 (0) |
編輯 收藏
http://www.whitefrost.com/servlet/connector?file=reference/2003/06/17/libXmlRequest.html
( ajax javascript 處理xml)
沒搞定,以為可以用這個js自如的處理xml,結果處處報錯
var oXml = getXml("sample_data.xml");
var aNodes = selectNodes(oXml,"/sample-data-root/the-data",oXml.documentElement);
這個js里根本沒有如下這個方法
[xml_document] = getXml(sPath): a synchronous GET request, returns null or an xml document object ,是另外一個,里面帶了N多參數,試了試還是不能用,難道是js下錯了?郁悶.....
換了個方法來處理讀入的xml文件
文件:formdatas.xml
<?xml version="1.0" encoding="gb2312"?>
<formdatas>
? <data>
?? <address>地址</address>??????????????????????????????????? #text
?? <productaddress>生產地址</productaddress>?? #text
?? <diploma>大專</diploma>????????????????????????????????? #select
?? <type>二類|四類|三類</type>?????????????????????????? #checkbox
?? <sex>女</sex>?????????????????????????????????????????????????? #radio
?? <date>2005年12月31日</date>??????????????????????? #text
?? <memo>備注</memo>????????????????????????????????????? #textarea???
?? </data>??
</formdatas>
js片段:
function updateform(xmlname,obj){??
?var url = ""+xmlname;
?if(document.implementation&&document.implementation.createDocument) {
??
??var xmldoc = document.implementation.createDocument("", "", null);
??xmldoc.onload =? handler(xmldoc, obj);
??xmldoc.load(url);
?}
?else if(window.ActiveXObject) {
??
??var xmldoc = new ActiveXObject("Microsoft.XMLDOM");
??xmldoc.onreadystatechange = function() {
???if(xmldoc.readyState == 4) handler(xmldoc, obj);
??}
??xmldoc.load(url);
?}
}
function handler(xmldoc, obj) {
?var formdatas = xmldoc.getElementsByTagName("data")[0];?
?for (var i=0;i<obj.length ;i++ ){
???e=obj[i];?????
???if (e.name != '') //表單中的e.name對應xml里的tagName,利用對應關系,將值寫入表單中
???{????
????if ( e.type == 'text' || e.type == 'textarea'){?????
?????e.value = formdatas.getElementsByTagName(e.name)[0].firstChild.data;???
????}
????if( e.type == 'checkbox' || e.type == 'radio'){
?????var temp = formdatas.getElementsByTagName(e.name)[0].firstChild.data.split("|");?????
?????for(var k=0; k<temp.length; k++){
??????//alert( temp[k] );
??????if( e.value == temp[k] ) e.checked = true;
?????}
????}
????if( e.type == 'select-one' ){
?????var selvalue = formdatas.getElementsByTagName(e.name)[0].firstChild.data;
?????document.getElementById(e.name+"div").innerHTML="";
?????document.getElementById(e.name+"div").innerHTML=selvalue;
????}
???}
?}
}
效果:點擊"讀取xml文件"按鈕,將相應的值解析到文本框中,如下所示:

posted @
2006-05-18 19:54 簡易 閱讀(310) |
評論 (0) |
編輯 收藏