论坛首页 Java企业应用论坛

Tapestry4.1.x中内置的ajax(不用写任何的javascript)

浏览 11433 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-07-27  
Tapestry4.1.x中内置dojo实现ajax功能,不用写任何的javascript就可以实现,
具体步骤如下。
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楼。
   发表时间:2007-07-27  
我还是那个疑问,t4.1中,如何在page的render/rewind流程中判断是来自于正常的页面渲染呢,还是某个组件的ajax请求?

还有,如何控制某个ajax响应中的script代码块的执行?有时候默认执行script的行为会造成一些麻烦。
0 请登录后投票
   发表时间:2007-07-27  
除了你定义调用的方法和需要更新的组件中的取值方法,其他不更新组件的取值方法不执行,render/rewind中无法判断是否ajax请求,我觉得没判断的必要呀,你在你自己的方法里执行逻辑,render方法里处理公共的部分就可以了,控制ajax的执行,这个没考虑过,tapestry使用dojo实现的ajax,或许你看其生成的页面源代码,或者重新实现tapestry组件试试。
0 请登录后投票
   发表时间:2007-07-27  
谢谢!
从tapestry 4.0.x升级到4.1.x有什么注意事项么?官方文档中没提到,我不敢贸然升级。
0 请登录后投票
   发表时间:2007-07-27  
文档在这里
http://tapestry.apache.org/tapestry4.1/usersguide/upgrade4.0.html
还不是很全,我升级的时候忘记做记录了,你copy下项目不停的测试改就行,如果没用到tacos,升级还是挺方便的。
0 请登录后投票
   发表时间: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 浏览器访问不到,其它的也是
0 请登录后投票
   发表时间:2007-09-09  
已经发现是同事Friendly URL 配置错误了
0 请登录后投票
   发表时间:2007-09-10  
可以是可以了,不过为什么点击后是生成一个"层"盖在网页上?内容和原来一样,只是多了个时间

而且层上有个CLOSE链接 用来关闭层.

怎么会是这个样子?有谁可以帮忙解答下吗?


纠正下楼主的错误

Tapestry Page类
里要添加public abstract Date getTime();

---------------------------------------
public void setTime()                  |
    {                                  |
        setTime(new java.util.Date()); |
    }                                  |
---------------------------------------

这个函数名要换掉,不能和 public abstract void setTime(Date time); 一样

会出错的
0 请登录后投票
   发表时间:2007-09-10  
用你的例子修改了一些,出现以下情况:

原原本本(多了个getTime抽象方法)照你的例子运行,点击directLink没有任何反应...
请问楼主,是哪个地方出了问题?
0 请登录后投票
   发表时间:2007-09-10  
第一次尝试的页面类代码:
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> 


谢谢!
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics