`
tapestry
  • 浏览: 189079 次
社区版块
存档分类
最新评论

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

阅读更多
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楼。
分享到:
评论
17 楼 wobu20 2007-09-11  
原因找到了...在页面类那边,
原代码是:
public abstract void setNum(Integer num);

改为:
public abstract void setNum(int num);


Integer类型在页面中是否就取不到值?有点不理解...
16 楼 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配置几乎相同!一样的代码......
找了很久,还是找不出原因!望大哥再助!:(
15 楼 jimlaren 2007-09-11  
不是一定要放到div里,原理应该是document.getElementbyId之类的函数调用,只要生成的html里有id应该就可以,然后让他根据id找到update的对象,最后利用innerHtml之类的替换,就是ajax那一套。
14 楼 superwdd 2007-09-11  
问题终于都找到了,哈哈

原来 是同伴配置的hivemodule.xml出了问题
13 楼 wobu20 2007-09-11  
谢谢tapestry大哥,可以了!
请问这样写有什么特殊的含义没有?是不是要更新的组件一定要放到div层里面?
12 楼 tapestry 2007-09-11  
<div jwcid="resetNum@Any"><span jwcid="@Insert" value="ognl:num">6</span></div>
11 楼 wobu20 2007-09-10  
将span改成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&amp;page=Test&amp;service=direct&amp;updateParts=resetNum" onclick="return tapestry.linkOnClick(this.href,'DirectLink', false)">Refresh time</a>.</p>  
  

</body> 
</html>
<!-- Render time: ~ 16 ms -->
 


没看到div输出哦...
点击的时候,在控制台那边有输出随机数,事件是有触发的!
10 楼 tapestry 2007-09-10  
<span jwcid="resetNum@Insert" value="ognl:num" renderTag="true"></span>
这个生成的html中你看一下是不是生成了类似
<span id="resetNum">3</span>之类的,我没测试,应该是不会生成的,因为span为tapestry里默认的tag去输出的,你试一试div。
9 楼 wobu20 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> 


谢谢!
8 楼 wobu20 2007-09-10  
用你的例子修改了一些,出现以下情况:

原原本本(多了个getTime抽象方法)照你的例子运行,点击directLink没有任何反应...
请问楼主,是哪个地方出了问题?
7 楼 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); 一样

会出错的
6 楼 superwdd 2007-09-09  
已经发现是同事Friendly URL 配置错误了
5 楼 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 浏览器访问不到,其它的也是
4 楼 tapestry 2007-07-27  
文档在这里
http://tapestry.apache.org/tapestry4.1/usersguide/upgrade4.0.html
还不是很全,我升级的时候忘记做记录了,你copy下项目不停的测试改就行,如果没用到tacos,升级还是挺方便的。
3 楼 sorphi 2007-07-27  
谢谢!
从tapestry 4.0.x升级到4.1.x有什么注意事项么?官方文档中没提到,我不敢贸然升级。
2 楼 tapestry 2007-07-27  
除了你定义调用的方法和需要更新的组件中的取值方法,其他不更新组件的取值方法不执行,render/rewind中无法判断是否ajax请求,我觉得没判断的必要呀,你在你自己的方法里执行逻辑,render方法里处理公共的部分就可以了,控制ajax的执行,这个没考虑过,tapestry使用dojo实现的ajax,或许你看其生成的页面源代码,或者重新实现tapestry组件试试。
1 楼 sorphi 2007-07-27  
我还是那个疑问,t4.1中,如何在page的render/rewind流程中判断是来自于正常的页面渲染呢,还是某个组件的ajax请求?

还有,如何控制某个ajax响应中的script代码块的执行?有时候默认执行script的行为会造成一些麻烦。

相关推荐

    tapestry5.1.0.5中文实例教程

    tapestry5.1.0.5中文实例教程,对于目前国内tapestry学习资源紧缺的情况,可谓填补了中文学习最大的空白,对于想学习tapestry5框架的人来说可谓字字如金,内容详尽,由浅入深,pdf格式

    tapestry 5 ..........

    它补充并建立在标准Java Servlet API之上,因此可以在任何Servlet容器或应用服务器中运行。Tapestry将Web应用程序划分为一组页面,每个页面由组件构建而成。这种方式提供了一致的结构,并允许Tapestry框架承担关键...

    Tapestry5.chm

    《Tapestry5.chm》是一个关于Tapestry 5框架的综合指南,它为开发者提供了详尽的文档和教程,旨在帮助用户深入理解和高效利用这个强大的Java Web开发框架。Tapestry 5是一个开源的、组件驱动的MVC框架,它强调了代码...

    tapestry 5.1.0.5 官方组件文档 天涯浪子

    来自:http://tapestry.apache.org/tapestry5.1/tapestry-core/ref

    Tapestry入门.ppt

    页面类是特殊的组件,继承自BasePage(org.apache.tapestry.html.BasePage),具有自己的规范和模板,但没有参数。页面状态分为瞬时、动态和持久三种,其中持久状态的页面属性会在多个请求间保持,通过实现...

    tapestry-4.0.zip

    尽管现在已经有更新的版本,如Tapestry 5.x和6.x,但学习Tapestry 4.0仍然可以帮助开发者理解Web应用开发的基本原理,为进一步学习现代框架打下坚实的基础。这个“tapestry-4.0.zip”压缩包中的内容,包含了一系列...

    tapestry集成ajax

    - Tapestry 内置了对 AJAX 的支持,通过其提供的 `AjaxEventComponent` 和 `AjaxLink` 等组件,开发者可以轻松地添加AJAX行为到页面上。 - `AjaxEventComponent` 可以监听用户触发的事件,并通过AJAX请求来处理,...

    extjs_tapestry.rar_extjs tapestry_extjs_tapestry_tapestry

    标题 "extjs_tapestry.rar_extjs tapestry_extjs_tapestry_tapestry" 暗示了这个压缩包是关于 ExtJS 和 Tapestry 两个框架整合使用的资源集合。描述指出,这些资源包含了在 Tapestry 框架中应用 ExtJS 的兼容性代码...

    Tapestry简单入门.rar_java Tapestry_tapestry

    异步请求处理则使得Tapestry能优雅地处理AJAX请求,提升用户体验。 总之,Tapestry提供了一个强大且灵活的平台,用于构建高性能、易于维护的Web应用。通过学习"Tapestry简单入门.rar"中的文档,你将能够掌握这个...

    tapestry5.1.0.5 官方api doc 文档 chm版 天涯浪子

    在官方下载的最新的tapestry5的api文档。。。。。。

    Tapestry.5.Building.Web.Applications.pdf

    《Tapestry 5.0:构建Web应用程序》是一份专为深入了解Tapestry 5.0框架而准备的详细指南。Tapestry是Apache软件基金会的一个开源项目,它提供了一种基于Java的声明式MVC(Model-View-Controller)框架,用于构建...

    Manning.Tapestry.in.Action.Mar.2004.rar

    《Tapestry in Action》是由Manning出版社在2004年3月出版的一本专业书籍,主要聚焦于Apache Tapestry框架的应用与实践。这本书详细介绍了如何使用Tapestry来构建高效、可维护且易于扩展的Java Web应用程序。...

    tapestry用户手册.pdf

    Tapestry提供了一套内置的验证机制,例如FieldLabel组件可以与输入字段配合,进行客户端和服务器端的验证,确保数据的有效性。 以上只是Tapestry用户手册的部分内容概览,实际的手册将更深入地探讨这些概念,包括...

    Tapestry5, Packt.Publishing.Tapestry.5.Building.Web.Applications.Jan.2008.RETAiL.eBOOk-sUppLeX.pdf

    5. **安全性与权限控制**:为了确保Web应用的安全性,Tapestry5内置了一套完善的安全机制,包括用户认证、授权以及细粒度的权限控制。这些功能可以帮助开发者构建安全可靠的Web应用。 #### 五、学习资源与实践建议 ...

    Tapestry5.0.16_API文档

    Tapestry5.0.16文档和大家一起学习

    tapestry5以上的帮助事例,帮助文档与spring衔接文档

    Tapestry是一个基于控件的框架以致于用它开发Web应用类似开发传统的GUI应用。你用Tapestry开发Web应用时你无需关注以操作为中心的(Operation-centric) Servlet API.引用Tapestry网站上的一句话:"Tapestry用对象...

    tapestry-bin-5.1.0.5

    8. **tapestry-hibernate-NOTICE.txt, tapestry-hibernate-core-NOTICE.txt, tapestry-ioc-NOTICE.txt**:与对应的LICENSE文件类似,这些NOTICE文件列出了在Tapestry的这些特定模块中使用到的第三方组件和它们的版权...

    Tapestry5最新中文入门实例教程

    - **内置的Ajax支持**:Tapestry 5内置了对Ajax的支持,开发者无需编写复杂的JavaScript代码即可实现异步数据交互。 - **简化的工作流**:通过Tapestry的类重加载特性,开发者可以在不重启服务器的情况下实时预览...

    Packt.Publishing.Tapestry.5.Building.Web.Applications.Jan.2008.pdf

    - **强大的表单支持**:Tapestry 5具有内置的表单处理能力,可以轻松地创建和验证Web表单。 - **RESTful服务**:支持创建RESTful Web服务,便于与其他系统集成。 #### 四、Tapestry 5的安装与配置 为了开始使用...

Global site tag (gtag.js) - Google Analytics