如何在struts2中使用、配置ajax,json?sx:datetimepicker无法显示日历

关于sx:datetimepicker无法显示出日历的问题(注:没有发生异常,但是就是不显示日历,却能显示label),可能也和下面提到的一样,是struts2的2.2.1版本有bug。最好使用2.1.8.1或2.0.14版本。另外包版本应该一致,怎样才算一致则要仔细考虑了,什么包配什么包,哪个版本号配哪个版本号,要仔细考虑。

但是如果这样子还是无法正确显示,输出日历呢????????请参考我后面写的内容(后记)!!!!!!!!

如何在struts2中使用、应用、配置ajax,json!!!!!!!!!!!!!!

我现在越发怀疑问题是源于struts2包的版本。2.2.1版本貌似在处理dojo、ajax方面有问题,只要是

涉及到的相关编程就会出问题,比如datetimepicker不显示出日历的问题,不知道是不是它本身有

bug,难道是设计者的疏忽?
更不用说混用2.0与2.2的包的情况了,看来,以后要多留心包的版本问题了。我原以为会兼容的。
看来struts2-json-plugin-2.2.1.jar没有struts2-json-plugin-2.1.8.1.jar好用?

下载地址:
http://grepcode.com/snapshot/repo1.maven.org/maven2/org.apache.struts/struts2-json-

plugin/2.1.8.1

http://struts.apache.org/struts2/apps/struts2-showcase/dependencies.html


之后还发现了:
Caused by: The package name 'json-default' at location package - jar:file:/F:/netbeans%

20workspace/netbeans%206.9/testStruts2_json/build/web/WEB-INF/lib/struts2-json-plugin-

2.1.8.1.jar!/struts-plugin.xml:8:59 is already been used by another package at location

package - jar:file:/F:/netbeans%20workspace/netbeans%

206.9/testStruts2_json/build/web/WEB-INF/lib/jsonplugin-0.34.jar!/struts-plugin.xml:8:59

- package - jar:file:/F:/netbeans%20workspace/netbeans%

206.9/testStruts2_json/build/web/WEB-INF/lib/struts2-json-plugin-2.1.8.1.jar!/struts-

plugin.xml:8:59

仔细看了,发觉原来jsonplugin-0.34.jar没有移除干净(我之前用了jsonplugin-0.34.jar来做,后

来发现不行又导入了其他包,估计是没有记得移除或没移除干净),囧,难道是出故障了?netbean

里面根本没显示它,难道是因为我之前进行了强制关闭?

教训:以后出现连番的异常报告,要看最上方的那条。重点看Caused by。

我进到web/lib下仔细一看,吓一跳,好多重名不同版本的包。。。囧了,难道下次在netbeans里删

除包后需要“清理并生成”???是的!!!

由此还可看出,不能导入太多包,因为可能相互冲突。

另外,出现这个好像不影响运行结果:
严重: Could not find action or result
/netbeans-tomcat-status-test
There is no Action mapped for namespace / and action name netbeans-tomcat-status-test. -

[unknown location]


好了,下面是
正确的做法:

struts版本:2.1.8.1 
一.需要包(2个)

    json-lib-2.1.jar

    struts2-json-plugin-2.1.8.1.jar

二.下载js(两个)

    json.js

    prototype.js

三.配置文件中添加如下代码.

Xml代码 
<struts>   
    <package name="TestAjax" extends="json-default">   
        <action name="TestAjax" class="com.DreamAjaxAction">   
            <result type="json" />   
        </action>   
    </package>   
</struts>  

四.创建DreamAjaxAction

Java代码 
package com;    
   
import com.opensymphony.xwork2.ActionSupport;    
   
public class DreamAjaxAction extends ActionSupport {    
   
    private String result;    
   
    public String getResult() {    
        return result;    
    }    
   
    public void setResult(String result) {    
        this.result = result;    
    }    
   
    public String execute() throws Exception {    
        result = "ajax测试";    
        return SUCCESS;    
    }    
}   
package com;

import com.opensymphony.xwork2.ActionSupport;

public class DreamAjaxAction extends ActionSupport {

private String result;

public String getResult() {
   return result;
}

public void setResult(String result) {
   this.result = result;
}

public String execute() throws Exception {
   result = "ajax测试";
   return SUCCESS;
}
} 五.测试jsp

    ...

    <script src="../json.js" type="text/javascript"></script>
    <script src="../prototype.js" type="text/javascript"></script>
    <script>
        function setTest() {
           var url = "TestAjax .action";
           new Ajax.Request(url,{method: 'post',onComplete: getTest});
        }
        function getTest(originalRequest){

            document.getElementById("test").innerHTML=

                                                      

originalRequest.responseText.parseJSON().result;

        }
     </script>
     <input type="button" οnclick="setTest()"/>
   <span id="test"></span>

    ....

六.感谢网友提供大量学习资料.

注意:
Json-lib requires (at least) the following dependencies in your classpath:

jakarta commons-lang 2.4 
jakarta commons-beanutils 1.7.0 
jakarta commons-collections 3.2 
jakarta commons-logging 1.1.1 
ezmorph 1.0.6

好了,发现没什么问题了,可以正确运行了。
但是我决定再次尝试jsonplugin-0.34.jar,这次有了经验教训,我很小心,于是发现了新问题:

严重: Servlet.service() for servlet default threw exception
java.lang.ClassNotFoundException: com.opensymphony.xwork2.util.TextUtils
        at org.apache.catalina.loader.WebappClassLoader.loadClass

(WebappClassLoader.java:1360)
        at org.apache.catalina.loader.WebappClassLoader.loadClass

(WebappClassLoader.java:1206)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
        at com.googlecode.jsonplugin.SerializationParams.<init>

(SerializationParams.java:38)
        at com.googlecode.jsonplugin.JSONResult.writeToResponse(JSONResult.java:194)
        at com.googlecode.jsonplugin.JSONResult.execute(JSONResult.java:184)
        at com.opensymphony.xwork2.DefaultActionInvocation.executeResult

(DefaultActionInvocation.java:362)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke

(DefaultActionInvocation.java:266)
        at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept

(DefaultWorkflowInterceptor.java:165)


在网上查了一下:

苍天啊~~~~~~~~~~~~~Orz。。。

发现了这篇文章:

“““

jsonplugin包与Struts2包版本匹配问题
文章分类:Java编程 
java.lang.NoSuchMethodError: com.opensymphony.xwork2.ActionContext.get

(Ljava/lang/String;)Ljava/lang/Object;”异常,导致该异常的是jsonplugin的jar包与Struts2的

jar包不匹配引起的。

jsonplugin-0.33.jar     Struts 2 JSON Plugin 0.33 匹配 Struts 2.1.x Compatible
jsonplugin-0.32.jar     Struts 2 JSON Plugin 0.32 匹配 Struts 2.0.x Compatible

异常:java.lang.NoClassDefFoundError: com/opensymphony/xwork2/util/TextUtils

原因:jsonplugin-0.34.jar 配合 struts2-core-2.1.8.1.jar 使用的情况下报的异常,但以前的项

目中jsonplugin-0.34.jar 配合 struts2-core-2.1.6.jar 使用不会出现这样的异常

解决方法:去掉jsonplugin-0.34.jar,使用struts2-json-plugin-2.1.8.1.jar 和 json-lib-

2.1.jar两个包

《《《《《
《《《《《
慢着慢着,那么拿哪个jsonplugin版本配Struts 2.2.x 呢????????????+_+
》》》》》
》》》》》

服务器没有异常,后来在客户端跟踪到错误信息如下

java.lang.NoClassDefFoundError: org/apache/commons/beanutils/DynaBean缺少jar包造成


struts2.1.6+json用到的jar包总共如下

json-lib2.1.jar

json-lib2.1.jar 
json-plugin-0.33.jar 
ezmorph-1.0.3.jar 
commons-beanutils-1.7.0.jar


”””

忽然记起了在google上只提供了jsonplugin-0.34.jar与jsonplugin-0.32.jar的下载,再搜了一下,

发现了jsonplugin-0.33.jar的下载地址,下载时提示已过期,不过我还是下了来。

大家自己研究一下。。。


囧。。。午夜3点了。。。

后记 2010年12月1日:
以前关于struts2中的datetimepicker无法正常显示的问题。
后来我在使用另一本书上的参考代码时,留意到了书中某页有一句关键句,提示“建立web项目时必须使用j2ee1.4规范,否则会使struts2无法正常运行”。
事实上,我之前都是使用j2ee5.0,但是对于大多数项目,貌似只要不涉及struts中关于ajax的标签,都能正常运行。而此次我在netbeans中重建一个规范为j2ee1.4的项目后,发现可以运行该书中涉及到ajax的标签。基本上无大碍。

看来应该使用j2ee1.4规范,但是datetimepicker显示有些乱码,其中的“九月、十月、十一月、十二月”前面的字变成了问号,不知道为什么?

还有,书中有些参考代码涉及到json的,运行后无法达到预期效果,原因待查。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值