刚才使用dojo1.0.1发现一个奇怪的问题:
首先陈述一下熊的的开发环境:
  • Windows 2003
  • eclipse3.3.1
  • myeclipse6.0.1
  • tomcat6.0.24
  • jdk1.6.0_03
因为兄弟使用myeclipse,创建jsp页面时会自动生成代码:

java 代码
  1. <%
  2. String path = request.getContextPath();
  3. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
  4. %>
xml 代码
  1. <base href="<%=basePath%>"/>

首先,先解释一下base标签的作用:确保文档中所有的相对URL都可以被分解成正确的文档地址,即使在文档本身被移动或重命名的情况下也可以正确解析。当使用时,base 元素必须出现在文档的 head 内,在任何用于引用外部资源的元素之前。
鉴于它的作用,所以一般情况下,兄弟都保留Myeclipse自动帮助生成的这段代码。
但是在测试时发现,如果包含base标签,在IE6下会发生如下错误:
Internet Explorer 无法打开Internet 站点http://localhost:8080/test/formerrjsp。已中止操作。
希望英文好的朋友帮忙问问这个问题的原因。


补充一点,也可能是老调重弹。就是在使用下拉列表框组件时,采用下面的格式:
xml 代码
  1. <select name="city">
  2. <option>石家庄</option>
  3. <option>保定</option>
  4. <option>唐山</option>
  5. <option>秦皇岛</option>
  6. <option>承德</option>
  7. select>

不要在option的开始和标签之间换行显示。这会导致在运行时看不到我们要显示的选项的情况。这样的错误情况常见于使用工具对代码进行格式化后。
今天在在使用dijit.Editor发现在服务器端读不到数据。经过查找资料,发现解决办法如下:
js 代码
  1. function do_submit(form){
  2. var kw = {
  3. url: "<%=path%>/first/FirstAction.action",
  4. content: form.getValues(),//读取表单所有选项的键值对。
  5. load: function(data){
  6. //dojo.byId('response').innerHTML = data;
  7. alert(data);//弹出显示服务器端的响应信息
  8. },
  9. error: function(data){
  10. alert("提交失败: " + data);
  11. },
  12. timeout: 2000
  13. //form: "myForm"//如果使用这种方式,dijit.Editor的数据无法提交
  14. };
  15. dojo.xhrPost(kw);//提交表单
  16. }
xml 代码
  1. <form dojoType="dijit.form.Form" id="myForm" execute="do_submit(this)">
  2. ...
  3. form>

最近在开发中,碰到一个问题,就是在form表单中同时使用dijit.form.DateTextBox、dijit.Editor时出现问题。要么在服务器端取不到dijit.Editor的值,要么dijit.form.DateTextBox返回的值类似于“Thu Nov 22 2007 00:00:00 GMT+0800”这样的格式。经过多次尝试,找到一个比较简单的解决办法,就是修改dojo中的Form.js的getValues()方法代码如下:
js 代码
  1. getValues: function() {
  2. // summary: generate JSON structure from form values
  3. // get widget values
  4. var obj = {};
  5. dojo.forEach(this.getDescendants(), function(widget){
  6. var value = widget.getValue ? widget.getValue() : widget.value;
  7. var name = widget.name;
  8. if(!name){ return; }
  9. // Store widget's value(s) as a scalar, except for checkboxes which are automatically arrays
  10. if(widget.setChecked){
  11. if(/Radio/.test(widget.declaredClass)){
  12. // radio button
  13. if(widget.checked){
  14. dojo.setObject(name, value, obj);
  15. }
  16. }else{
  17. // checkbox/toggle button
  18. var ary=dojo.getObject(name, false, obj);
  19. if(!ary){
  20. ary=[];
  21. dojo.setObject(name, ary, obj);
  22. }
  23. if(widget.checked){
  24. ary.push(value);
  25. }
  26. }
  27. }else{
  28. //用于处理DAteTextBox类型的数据
  29. if(widget.value=="Invalid Date" || widget.value=="NaN"){
  30. value=widget;
  31. }
  32. // plain input
  33. dojo.setObject(name, value, obj);
  34. }
  35. });
希望英语好的兄弟,在看完这篇文章后,能向dojo组织反映一下,或者有什么好的建议,提出来,大家共同讨论。
评论
发表评论

您还没有登录,请登录后发表评论

noname365
搜索本博客
最近加入圈子
存档
最新评论