论坛首页 Java企业应用论坛

Tapestry4很难应付 Frame的页面

浏览 4770 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2005-09-11  
我有一个 FrameSet的页面,想用T4实现,情景很简单,左右两个Frame,左边的是一个标题列表,点击后右边显示这个标题的内容,如果是Jsp的话,使用javascript就搞定了,但是如果用T4,点击一个标题是无法调用Js函数的:
<span jwcid="@Foreach" source="ognl:articles" value="ognl:currentVar">
<TR>
	<TD>
	<a href="#" jwcid="url@DirectLink" id="ognl:currentVar[0].id" onclick='showDetail("ognl:currentVar[0].id");;' listener="ognl:listeners.doDetail" parameters="ognl:currentVar[0].id">
	<span jwcid="@Insert" value="ognl:currentVar[0].articleTitle">test</span>
	</a>
	</TD>
	<TD><span jwcid="@Insert" value="ognl:currentVar[1].authorName">test</span></TD>
	<TD><span jwcid="@Insert" value="ognl:currentVar[0].articleViewTime">test</span></TD>
	<TD><font size="2"><span jwcid="@Insert" value="ognl:currentVar[0].articlePostTime">test</span></font></TD>
</TR>
</span>


请求的特殊的t4似的url我可以在后台得到,但是
在浏览器上,注意那个DirectLink函数会被翻译成这个样子:
<a href="/TapTest/app?component=url&amp;page=main&amp;service=direct&amp;session=T&amp;sp=S402880850379b5ba010379b5c0e70002" onclick="showDetail(&amp;ognl:currentVar[0].id&amp;);;" id="402880850379b5ba010379b5c0e70002">

Ognl表达式根本不翻译成id! 居然还是“&amp;ognl:currentVar[0].id&amp;" ” 这样我就无法得到用户点击的是哪个标题,从而得到参数调用相应的js方法
谁知道为何在javascript的onclick事件中,为什麽ognl表达式不执行?
是不是T4不适合处理这种分桢的页面?
   发表时间:2005-09-12  
昏迷,你居然会这样想当然的写OGNL。汗颜~无语咯。何况与标题不符。


不会写就老老实实问嘛,何必下如此自以为是的结论?



onclick='ognl:"showDetail(\"" + currentVar[0].id + "\");"'
0 请登录后投票
   发表时间:2005-09-12  
gzdlw 写道
昏迷,你居然会这样想当然的写OGNL。汗颜~无语咯。何况与标题不符。


不会写就老老实实问嘛,何必下如此自以为是的结论?



onclick='ognl:"showDetail(\"" + currentVar[0].id + "\");"'


多谢,这样写是可以的。当有两个问题
这个 ognl 表达式的用法,我到他的主页的document 中看过了,好像不是很详细,使用的例子也不多,比如这里的问题,为什么不是写成

onclick='"showDetail(ognl:\"" + currentVar[0].id + "\");;"' 

呢?
这里我按照taglib的方式去写了,如果是 jsp标签,就应该是:
onclick='"showDetail(<jspTag:mytag attr=currentVar[0].id />+ "\");;"' 


但是使用ognl的时候,好像是javascript 函数的顺序和ognl表达式混起来的,都说ognl很强大,但是哪里有比较全的 ognl 使用文档?应该包括这种和 javascript混用的情况。

我这种在tapestry中调用 javascript的方法是不是最标准的T4做法呢?他有没有更方便的,或者更地道的调用方法呢? 比如我看他的文档上好像可以在后台调用前台的javascript函数,例如:

public void invokeJavaScript(IMarkup mark,IRequestCycle cycle);{
              component.process(FormType.input_Type,"javascript_function_Name");;
}


如果能像这样在后台指定调用前台的javascript,就太方便了,因为T4的优势是在后台可以方便的转递变量,这样就不用在前台转递js变量了!  不知道这样是否可以?
0 请登录后投票
   发表时间:2005-09-12  
引用
这里我按照taglib的方式去写了,如果是 jsp标签,就应该是:
java代码: 


onclick='"showDetail(&lt;jspTag:mytag attr=currentVar[0].id /&gt;+ "\&);"'




但是使用ognl的时候,好像是javascript 函数的顺序和ognl表达式混起来的,都说ognl很强大,但是哪里有比较全的 ognl 使用文档?应该包括这种和 javascript混用的情况


在这里呢,我说点自己的想法。。。我觉得做技术,最忌讳的就是在一种技术身上去寻找另外一种技术的影子。。。有时候会有人问我这样的问题:“Tapestry怎么不能像JSP那样如何如何使用,或者完成如何如何功能。”。。。遇到这种问题,我都非常反感,所以通常会很不客气的回答:“没人求你用Tapestry呀。”

记得一年前我刚进公司的时候,分派下来的第一件工作是翻译OGNL文档。我觉得OGNL文档还是比较全面的,事隔一年,我想现在OGNL文档应该不会差到哪里去。

引用
我这种在tapestry中调用 javascript的方法是不是最标准的T4做法呢?他有没有更方便的,或者更地道的调用方法呢? 比如我看他的文档上好像可以在后台调用前台的javascript函数,例如:

java代码: 


public void invokeJavaScript(IMarkup mark,IRequestCycle cycle){
              component.process(FormType.input_Type,"javascript_function_Name");
}




如果能像这样在后台指定调用前台的javascript,就太方便了,因为T4的优势是在后台可以方便的转递变量,这样就不用在前台转递js变量了!  不知道这样是否可以?

我不知道T4现在是不是可以这样来调用JS。。。我手头上现在还没有全面的Tapestry文档。。。不过呢,我肯定不会这样用。因为我们都是做B/S开发的,JavaScript作为脚本语言,本来就是为了减少与服务器端的交互而存在(作为数据效验)。如果按照你说的这种用法,数据都已经提交到服务器端了,再返回给客户端JS进行数据效验,毫无意义。即便要使用xmlhttp,也不会用这种做法。

即便遇到真的非常非常特殊的JS变量传递,我仍然会通过ognl获取值。这个嘛,就看程序员自己的变通了,具体情况具体处理。
0 请登录后投票
   发表时间:2005-09-13  
怎么会不好实现呢

左边的导航可以采用硬编码的url嘛

这样 和jsp没多大区别,什么都能够实现
0 请登录后投票
   发表时间:2006-11-20  
请问怎么把页面显示在框架右边?
是用哪个组件:是PageLink,DirectLink还是ExternalLink?
0 请登录后投票
论坛首页 Java企业应用版

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