2007-07-27
Tapestry4.1.x中内置的ajax(不用写任何的javascript)
关键字: ajax
Tapestry4.1.x中内置dojo实现ajax功能,不用写任何的javascript就可以实现,
具体步骤如下。
1、用Shell组件包含进dojo,Shell组件会自动配置dojo包。
2、使用updateComponents参数
这个参数已经在很多组件里实现,加上这个参数就可以实现ajax了,例如组件
DirectLink, LinkSubmit, Form, ImageSubmit and Submit,你只要告诉它要
更新哪些部分或者组件就可以了,jwcid="time@Insert"这种取id为time,你也
可以将你需要更新的部分使用Any组件包含起来,例如
更新多个,例如updateComponents="time,ajax"。
3、普通的Tapestry Page类
没了,已经可以运行了。
修订:修改了listener函数名称,谢谢8楼。
具体步骤如下。
1、用Shell组件包含进dojo,Shell组件会自动配置dojo包。
<html jwcid="@Shell" title="Basic Ajax Page">
<body jwcid="@Body">
<p>Basic javascript inclusion sample.</p>
</body>
</html>
2、使用updateComponents参数
这个参数已经在很多组件里实现,加上这个参数就可以实现ajax了,例如组件
DirectLink, LinkSubmit, Form, ImageSubmit and Submit,你只要告诉它要
更新哪些部分或者组件就可以了,jwcid="time@Insert"这种取id为time,你也
可以将你需要更新的部分使用Any组件包含起来,例如
<div jwcid="ajax@Any">update me</div>,同样这时的Id为ajax,而且你可以
更新多个,例如updateComponents="time,ajax"。
<html jwcid="@Shell" title="Basic Ajax Page"> <body jwcid="@Body"> <p>Basic javascript inclusion sample.</p> <p><a jwcid="@DirectLink" listener="listener:onRefreshTime" updateComponents="time">Refresh time</a>.</p> <div jwcid="time@Insert" value="ognl:time" renderTag="true" /> </body> </html>
3、普通的Tapestry Page类
public abstract BasicAjax extends BasePage {
public abstract void setTime(Date time);
public void onRefreshTime()
{
setTime(new java.util.Date());
}
}
没了,已经可以运行了。
修订:修改了listener函数名称,谢谢8楼。
评论
wobu20
2007-09-11
原因找到了...在页面类那边,
原代码是:
改为:
Integer类型在页面中是否就取不到值?有点不理解...
原代码是:
public abstract void setNum(Integer num);
改为:
public abstract void setNum(int num);
Integer类型在页面中是否就取不到值?有点不理解...
wobu20
2007-09-11
<span jwcid="time@Insert" value="ognl:num" inherit-informal-parameters="yes" id="time" renderTag="true">time</span>
这样是么?为什么在一个项目里面这样写可以生成span标签,而另一个却不行?用同样的包,hivemodule、web、application配置几乎相同!一样的代码......
找了很久,还是找不出原因!望大哥再助!:(
这样是么?为什么在一个项目里面这样写可以生成span标签,而另一个却不行?用同样的包,hivemodule、web、application配置几乎相同!一样的代码......
找了很久,还是找不出原因!望大哥再助!:(
jimlaren
2007-09-11
不是一定要放到div里,原理应该是document.getElementbyId之类的函数调用,只要生成的html里有id应该就可以,然后让他根据id找到update的对象,最后利用innerHtml之类的替换,就是ajax那一套。
superwdd
2007-09-11
问题终于都找到了,哈哈
原来 是同伴配置的hivemodule.xml出了问题
原来 是同伴配置的hivemodule.xml出了问题
wobu20
2007-09-11
谢谢tapestry大哥,可以了!
请问这样写有什么特殊的含义没有?是不是要更新的组件一定要放到div层里面?
请问这样写有什么特殊的含义没有?是不是要更新的组件一定要放到div层里面?
tapestry
2007-09-11
<div jwcid="resetNum@Any"><span jwcid="@Insert" value="ognl:num">6</span></div>
wobu20
2007-09-10
将span改成div,情况还是一样...
页面源码为:
没看到div输出哦...
点击的时候,在控制台那边有输出随机数,事件是有触发的!
页面源码为:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- Application: fruit -->
<!-- Page: Test -->
<!-- Generated: Mon Sep 10 20:33:33 CST 2007 -->
<html>
<head>
<meta name="generator" content="Tapestry Application Framework, version 4.1.2" />
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
<title>test</title>
<script type="text/javascript">djConfig = {"isDebug":true,"baseRelativePath":"/fruit/app?service=asset&path=%2Fdojo-0.4.3%2F","parseWidgets":false,"locale":"zh-cn"} </script>
<script type="text/javascript" src="/fruit/app?service=asset&path=%2Fdojo-0.4.3%2Fdojo.js"></script>
<script type="text/javascript">
dojo.require("dojo.logging.Logger");
dojo.log.setLevel(dojo.log.getLevel("WARNING"));
</script>
<script type="text/javascript">
dojo.registerModulePath("tapestry", "/fruit/app?service=asset&path=%2Ftapestry%2F");
</script>
<script type="text/javascript" src="/fruit/app?service=asset&path=%2Ftapestry%2Fcore.js"></script>
<script type="text/javascript">
dojo.require("tapestry.namespace");
tapestry.requestEncoding='UTF-8';
</script>
</head>
<head>
</head>
<body id="Body">
<p><a id="DirectLink" href="/fruit/app?component=%24DirectLink&page=Test&service=direct&updateParts=resetNum" onclick="return tapestry.linkOnClick(this.href,'DirectLink', false)">Refresh time</a>.</p>
</body>
</html>
<!-- Render time: ~ 16 ms -->
没看到div输出哦...
点击的时候,在控制台那边有输出随机数,事件是有触发的!
tapestry
2007-09-10
<span jwcid="resetNum@Insert" value="ognl:num" renderTag="true"></span>
这个生成的html中你看一下是不是生成了类似
<span id="resetNum">3</span>之类的,我没测试,应该是不会生成的,因为span为tapestry里默认的tag去输出的,你试一试div。
这个生成的html中你看一下是不是生成了类似
<span id="resetNum">3</span>之类的,我没测试,应该是不会生成的,因为span为tapestry里默认的tag去输出的,你试一试div。
wobu20
2007-09-10
第一次尝试的页面类代码:
html模板
谢谢!
import java.util.Random;
import org.apache.tapestry.html.BasePage;
public abstract class Test extends BasePage
{
public abstract Integer getNum();
public abstract void setNum(Integer num);
public void reset(){
Integer num=new Random().nextInt(10000);
System.out.println(num);
setNum(num);
}
}
html模板
<html jwcid="@Shell" title="test" debugEnabled="true"> <head> </head> <body jwcid="@Body"> <p><a jwcid="@DirectLink" listener="listener:reset" updateComponents="resetNum">Refresh time</a>.</p> <p><span jwcid="resetNum@Insert" value="ognl:num" renderTag="true"></span></p> </body> </html>
谢谢!
wobu20
2007-09-10
用你的例子修改了一些,出现以下情况:
原原本本(多了个getTime抽象方法)照你的例子运行,点击directLink没有任何反应...
请问楼主,是哪个地方出了问题?
原原本本(多了个getTime抽象方法)照你的例子运行,点击directLink没有任何反应...
请问楼主,是哪个地方出了问题?
superwdd
2007-09-10
可以是可以了,不过为什么点击后是生成一个"层"盖在网页上?内容和原来一样,只是多了个时间
而且层上有个CLOSE链接 用来关闭层.
怎么会是这个样子?有谁可以帮忙解答下吗?
纠正下楼主的错误
Tapestry Page类
里要添加public abstract Date getTime();
---------------------------------------
public void setTime() |
{ |
setTime(new java.util.Date()); |
} |
---------------------------------------
这个函数名要换掉,不能和 public abstract void setTime(Date time); 一样
会出错的
而且层上有个CLOSE链接 用来关闭层.
怎么会是这个样子?有谁可以帮忙解答下吗?
纠正下楼主的错误
Tapestry Page类
里要添加public abstract Date getTime();
---------------------------------------
public void setTime() |
{ |
setTime(new java.util.Date()); |
} |
---------------------------------------
这个函数名要换掉,不能和 public abstract void setTime(Date time); 一样
会出错的
superwdd
2007-09-09
已经发现是同事Friendly URL 配置错误了
superwdd
2007-09-09
请问,为什么我的运行起来后,浏览器会有 dojo未定义的错误?
生成的dojo的js路径 在浏览器都无法访问 是tapestry路径生成错误了吗?
<script type="text/javascript" src="/assets*/static/dojo-0.4.3/dojo.js"></script>
/assets*/static/dojo-0.4.3/dojo.js 浏览器访问不到,其它的也是
生成的dojo的js路径 在浏览器都无法访问 是tapestry路径生成错误了吗?
<script type="text/javascript" src="/assets*/static/dojo-0.4.3/dojo.js"></script>
/assets*/static/dojo-0.4.3/dojo.js 浏览器访问不到,其它的也是
tapestry
2007-07-27
文档在这里
http://tapestry.apache.org/tapestry4.1/usersguide/upgrade4.0.html
还不是很全,我升级的时候忘记做记录了,你copy下项目不停的测试改就行,如果没用到tacos,升级还是挺方便的。
http://tapestry.apache.org/tapestry4.1/usersguide/upgrade4.0.html
还不是很全,我升级的时候忘记做记录了,你copy下项目不停的测试改就行,如果没用到tacos,升级还是挺方便的。
sorphi
2007-07-27
谢谢!
从tapestry 4.0.x升级到4.1.x有什么注意事项么?官方文档中没提到,我不敢贸然升级。
从tapestry 4.0.x升级到4.1.x有什么注意事项么?官方文档中没提到,我不敢贸然升级。
tapestry
2007-07-27
除了你定义调用的方法和需要更新的组件中的取值方法,其他不更新组件的取值方法不执行,render/rewind中无法判断是否ajax请求,我觉得没判断的必要呀,你在你自己的方法里执行逻辑,render方法里处理公共的部分就可以了,控制ajax的执行,这个没考虑过,tapestry使用dojo实现的ajax,或许你看其生成的页面源代码,或者重新实现tapestry组件试试。
sorphi
2007-07-27
我还是那个疑问,t4.1中,如何在page的render/rewind流程中判断是来自于正常的页面渲染呢,还是某个组件的ajax请求?
还有,如何控制某个ajax响应中的script代码块的执行?有时候默认执行script的行为会造成一些麻烦。
还有,如何控制某个ajax响应中的script代码块的执行?有时候默认执行script的行为会造成一些麻烦。
发表评论
提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则
- 浏览: 81845 次

- 详细资料
搜索本博客
最新评论
-
Tapestry5开发系列:如何 ...
我删掉了依赖,加了servlet还是不行,jetty就是不起来,说没找到logg ...
-- by leegorous -
Tapestry5每日播报(20080 ...
非常支持.
-- by biaoming -
Tapestry5每日播报(20080 ...
应该是所有变量,改成"变量命名中"吧。
-- by tapestry -
Tapestry5每日播报(20080 ...
实例变量多形象啊? 为什么总要说成员变量
-- by lonelyblue -
Tapestry4常用的注入对象 ...
-- by eric2002cn






评论排行榜