2007-09-08

tapestry4.1.2使用script问题

关键字: tapestry4

由于没有《Enjoying web development with tapestry 4.1》的文档,只能按照4.0里面的内容去测试。

对应书上例子:304页-311页。

Home.html:

xml 代码
  1. <html>  
  2. <body jwcid="@Body">  
  3.   
  4.   
  5. <form jwcid="@Form" action="http://www.foo.com">  
  6.    <input jwcid="deleteButton@Submit" type="submit" value="Delete"/>  
  7.    <span jwcid="insertConfirmScript"/>  
  8. form>  
  9.   
  10. body>  
  11. html>  

Home.page:

xml 代码
  1. xml version="1.0"?>  
  2.   
  3.   "-//Apache Software Foundation//Tapestry Specification 4.0//EN"    
  4.   "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">  
  5.   
  6. <page-specification>  
  7.     <component id="insertConfirmScript" type="Script">  
  8.         <binding name="script" value="literal:Confirm.script"/>  
  9.         <binding name="msg" value="literal:Are you sure?"/>  
  10.         <binding name="button" value="components.deleteButton"/>  
  11.     component>  
  12.        
  13. page-specification>  

Confirm.script:

xml 代码
  1. xml version="1.0" encoding="gb2312"?>  
  2.     "-//Apache Software Foundation//Tapestry Script Specification 3.0//EN"   
  3.     "http://jakarta.apache.org/tapestry/dtd/Script_3_0.dtd">  
  4. <script>  
  5. <input-symbol key="msg" required="yes"/>  
  6. <input-symbol key="button" required="yes"/>  
  7. <let key="funcName" unique="yes">getConfirmationlet>  
  8. <body>  
  9. function ${funcName}(){   
  10.       return confirm("${msg}");   
  11.     }   
  12. body>  
  13. <initialization>  
  14.         document.${button.form.name}.${button.name}.onclick=${funcName};   
  15. initialization>  
  16. script>  
  17.   

 

运行后的源码:

 

xml 代码
  1. <html>  
  2.   
  3. <body id="Body">  
  4. <script type="text/javascript">
  5. function getConfirmation(){   
  6.       return confirm("Are you sure?");   
  7.     }   
  8. // -->script>  
  9.   
  10.   
  11. <form method="post" action="/ConfirmDelete/app" id="Form">  
  12. <div style="display:none;" id="Formhidden"><input type="hidden" name="formids" value="deleteButton" />  
  13. <input type="hidden" name="component" value="$Form" />  
  14. <input type="hidden" name="page" value="Home" />  
  15. <input type="hidden" name="service" value="direct" />  
  16. <input type="hidden" name="submitmode" value="" />  
  17. <input type="hidden" name="submitname" value="" />  
  18. div>  
  19.    <input type="submit" name="deleteButton" id="deleteButton" value="Delete" />  
  20.       
  21. form>  
  22.   
  23. <script type="text/javascript">
  24. dojo.addOnLoad(function(e) {   
  25. dojo.require("tapestry.form");tapestry.form.registerForm("Form");   
  26. document.Form.deleteButton.onclick=getConfirmation;   
  27. tapestry.form.focusField('deleteButton');});   
  28. // -->script>body>  
  29. html>  

在IE中运行提示script错误:

java 代码
  1. 行:24  
  2. 字符:1  
  3. 代码:0  
  4. 错误:'dojo' 未定义   
  5. 网址:http://localhost:7856/ConfirmDelete/app   

 

和文档中的例子产生的页面代码不一致的地方在于最后几行。

文档中:

xml 代码
  1. <script language="JavaScript" type="text/javascript">
  2.   
  3. var $Form_events = new FormEventManager(document.$Form);   
  4.   
  5. document.$Form.deleteButton.onclick=getConfirmation;   
  6.   
  7. focus(document.$Form.deleteButton);   
  8.   
  9. // -->script>  

 

中间还有一些差别,先不管了!

运行后,点击按纽没有任何反应。

 

请问各位大大,4.1.2中使用script还需要哪一些配置?(动态绑定组件事件时才会出错,事先传入组件名不会出错!)

知道的请告诉我,再次谢过了!

评论
allenny 2007-10-16
a这个书上的章节我也看过了,但是不能解决我的问题:如果我想在script文件中动态循环生成一些javascript代码怎么办?帮助文档上大概是用<foreach>标签,但是这个标签怎么用呢。expression="symbols" key="item" 这样子用不行,请教这个用法。谢谢
wobu20 2007-09-10
呵呵,问题解决了,失误...
谢谢tapestry大哥啦!
tapestry 2007-09-10
你写的javascript只是confirm提交表单,confirm后你没对结果判断呀,判断一下return false,阻止提交表单。
wobu20 2007-09-10
将以上的内容封装成组件(ConfirmButton),确认框弹出来了,又一个问题,不管点确认还是取消,总会使form表单提交...
页面源码如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- Application: fruit -->
<!-- Page: Home -->
<!-- Generated: Mon Sep 10 16:35:08 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>Home</title>
<script type="text/javascript">djConfig = {"isDebug":false,"baseRelativePath":"/ConfirmDelete/app?service=asset&path=%2Fdojo-0.4.3%2F","preventBackButtonFix":false,"parseWidgets":false,"locale":"zh-cn"} </script>

 <script type="text/javascript" src="/ConfirmDelete/app?service=asset&path=%2Fdojo-0.4.3%2Fdojo.js"></script><script type="text/javascript" src="/ConfirmDelete/app?service=asset&path=%2Fdojo-0.4.3%2Fdojo2.js"></script>

<script type="text/javascript">
dojo.registerModulePath("tapestry", "/ConfirmDelete/app?service=asset&path=%2Ftapestry%2F");
</script>
<script type="text/javascript" src="/ConfirmDelete/app?service=asset&path=%2Ftapestry%2Fcore.js"></script>
<script type="text/javascript">
dojo.require("tapestry.namespace");
tapestry.requestEncoding='UTF-8';
</script>
</head>

<body id="Body">
<script type="text/javascript"><!--
function getConfirmation(){
	  return confirm("Are you sure?");
	}
// --></script>


<form method="post" action="/ConfirmDelete/app" id="Form">
<div style="display:none;" id="Formhidden"><input type="hidden" name="formids" value="button" />
<input type="hidden" name="component" value="$Form" />
<input type="hidden" name="page" value="Home" />

<input type="hidden" name="service" value="direct" />
<input type="hidden" name="submitmode" value="" />
<input type="hidden" name="submitname" value="" />
</div>
   
   <input type="submit" name="button" id="button" value="Delete" />
   

</form>

Mon Sep 10 16:35:08 CST 2007

<script type="text/javascript"><!--
dojo.addOnLoad(function(e) {
dojo.require("tapestry.form");tapestry.form.registerForm("Form");
dojo.event.connect(dojo.byId('button'),"onclick","getConfirmation");
tapestry.form.focusField('button');});
// --></script></body>
</html>
<!-- Render time: ~ 16 ms -->



使用组件的html模板:
<html jwcid="@Shell" title="Home">
<body jwcid="@Body">


<form jwcid="@Form" listener="listener:onSubmit">
   <input jwcid="deleteButton@ConfirmButton" msg="Are you sure?" type="submit" value="Delete"/>
</form>

<span jwcid="@Insert" value="ognl:time"/>

</body>
</html>



页面类:
package com.ttdev.confirmdelete;

import java.util.Date;

import org.apache.tapestry.html.BasePage;

public abstract class Home extends BasePage{

	public String onSubmit(){
		System.out.println("very ok!");
		setTime(new Date());
		return null;
	}
	
	public abstract Date getTime();
	
	public abstract void setTime(Date date);
	
}


谢谢!
wobu20 2007-09-10
谢谢tapestry大哥,我在html模板中未声明id,这样的话用的是匿名组件吧?那个id是tapestry自动产生的吧?

我将Confirm.script中的:
document.${button.form.name}.${button.name}.onclick=${funcName}; 


换成:
dojo.event.connect(dojo.byId('${button.id}'),"onclick","${funcName}");


后,错误提示没有了,可是点击按钮没有跳出希望看到的消息框,不知道为什么...
tapestry 2007-09-10
试一下
<form jwcid="myForm@Form" name="myForm" action="http://www.foo.com">
也就是说id和name都等于myForm,试一下,纯大写Form即使没有问题,也该避免用它做id。
wobu20 2007-09-10
firefox下提示的错误信息是:
document.Form has no properties http://localhost:7856/ConfirmDelete/app

错误定位的那一行代码为:
document.Form.deleteButton.onclick=getConfirmation;


请问tapestry大哥,这个是什么原因造成的?麻烦您再看一次!
tapestry 2007-09-10
'dojo' 未定义 ,用firefox加firebug看一下什么错误,应该是常见的乱码问题。
wobu20 2007-09-09
原来要在博客中编辑。。。
显示正常了,有知道原因的大哥大姐们,请告诉我一声,谢谢!
wobu20 2007-09-08
显示乱掉了,怎么编辑不了啊。。。
发表评论

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

wobu20
搜索本博客
博客分类
我的相册
505f8acd-a802-408e-86cc-927444736467-thumb
未命名
共 1 张
最近加入圈子
最新评论