dojo常见问题讨论

刚才使用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 代码
getValues: function() { // summary: generate JSON structure from form values // get widget values var obj = {}; dojo.forEach(this.getDescendants(), function(widget){ var value = widget.getValue ? widget.getValue() : widget.value; var name = widget.name; if(!name){ return; } // Store widget's value(s) as a scalar, except for checkboxes which are automatically arrays if(widget.setChecked){ if(/Radio/.test(widget.declaredClass)){ // radio button if(widget.checked){ dojo.setObject(name, value, obj); } }else{ // checkbox/toggle button var ary=dojo.getObject(name, false, obj); if(!ary){ ary=[]; dojo.setObject(name, ary, obj); } if(widget.checked){ ary.push(value); } } }else{ //用于处理DAteTextBox类型的数据 if(widget.value=="Invalid Date" || widget.value=="NaN"){ value=widget; } // plain input dojo.setObject(name, value, obj); } });
希望英语好的兄弟,在看完这篇文章后,能向dojo组织反映一下,或者有什么好的建议,提出来,大家共同讨论。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值