Tapestry莫名其妙的问题,求大虾指教。

YYZhQ 2006-10-10 09:55:25
我先把代码摘抄如下:
NodeTest.java

package com.test.tools;

import java.io.File;
import java.io.Serializable;

public class NodeTest implements Serializable{

/**
*
*/
private static final long serialVersionUID = 4737690332317229958L;

private String _sTestString;

public NodeTest(String name) {
_sTestString = name;
// TODO Auto-generated constructor stub
//this.name = name;
}


public static void main(String[] args){
NodeTest n = new NodeTest("test");
System.out.println(n.getSTestString());
}


public String getSTestString() {
return _sTestString;
}


public void setSTestString(String testString) {
_sTestString = testString;
}


}


TableListTest.java

package com.test.tapestry.compentent;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import org.apache.tapestry.IRequestCycle;
import org.apache.tapestry.annotations.InjectComponent;
import org.apache.tapestry.contrib.table.components.TableView;
import org.apache.tapestry.html.BasePage;

import com.test.tapestry.global.GetTableList;
import com.test.tapestry.global.TableNode;
import com.test.tools.NodeTest;

public abstract class TableListTest extends BasePage {


@InjectComponent("table")
public abstract TableView getTable();

@SuppressWarnings("unchecked")
public List getListValues() {
ArrayList _list = GetTableList.getTable("ResourceDir",null);
Iterator e = _list.iterator();
List _NodeTestLists=new ArrayList();
while(e.hasNext()){
NodeTest t = (NodeTest)e.next();
System.out.println("得到文件"+t.getSTestString());
_NodeTestLists.add(new NodeTest(t.getSTestString()));
}
System.out.println(_NodeTestLists);
return _NodeTestLists;
}


public boolean getCheckboxSelected() {
return getSelectedNodes().contains(getCurrentNode());
}

@SuppressWarnings("unchecked")
public void setCheckboxSelected(boolean bSelected) {
NodeTest currNodeTest = getCurrentNode();
Set setSelectedNodeTests = getSelectedNodes();
System.out.println("执行选择添加");
System.out.println(setSelectedNodeTests);
if (bSelected)
setSelectedNodeTests.add(currNodeTest);
else
setSelectedNodeTests.remove(currNodeTest);
System.out.println("选择的文件"+setSelectedNodeTests);
setSelectedNodes(setSelectedNodeTests);
}


@SuppressWarnings({"unchecked","unchecked"})
public void delNodes(IRequestCycle objCycle) {

}

public abstract NodeTest getCurrentNode();

public abstract Set getSelectedNodes();

public abstract void setSelectedNodes(Set set);

}

TableList.html

<html>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<head>
<body bgcolor="transparent" jwcid="@Body">
<script language="javascript">
function submitDel(){
if(confirm("确定删除?")){
document.form.submit();
return true;
}else{
return false;
}
}
</script>
<form jwcid="form1">
<span jwcid="checkboxGroup">
<TABLE jwcid="table" align="center" border="1" bgcolor="#c0c0c0" width="500px">
<tr>
<td>
<span jwcid="controlCheckbox" />
</td>
<td jwcid="tableColumns" />
</TR>


<tr jwcid="tableFormRows">
<td>
<span jwcid="checkbox" />
</td>
<td jwcid="tableValues" align="center" />
</tr>
<tr>
<td colspan="6">
<span jwcid="tablePages@Contrib:TableFormPages" />
</td>
</tr>

</TABLE> </span> <span jwcid="delButton" value="删除" />
</form>
</body>
</html>


TableList.page
<?xml version="1.0"?>
<!DOCTYPE page-specification PUBLIC
"-//Apache Software Foundation//Tapestry Specification 4.0//EN"
"http://jakarta.apache.org/tapestry/dtd/Tapestry_4_0.dtd">
<page-specification class="com.test.tapestry.compentent.TableListTest">
<property name="selectedNodes"
persist="session"
initial-value="new java.util.HashSet()"/>
<component id="form1" type="Form">
<!--binding name="listener" value="listeners.formSubmit"/-->
</component>
<component id="checkboxGroup" type="Contrib:CheckboxGroup"/>
<component id="controlCheckbox" type="Contrib:ControlCheckbox"/>
<component id="checkbox" type="Contrib:ControlledCheckbox">
<binding name="value" value="checkboxSelected"/>
</component>
<component id="table" type="Contrib:TableView">
<binding name="source" value="listValues"/>
<binding name="columns"
value="literal:sTestString"/>
</component>
<component id="tableColumns" type="Contrib:TableColumns"/>
<component id="tableFormRows" type="Contrib:TableRows">
<binding name="row" value="currentNode"/>
<binding name="keyExpression" value="literal:toString()"/>
</component>
<component id="tableValues" type="Contrib:TableValues"/>
<component id="delButton" type="Submit">
<binding name="listener" value="listener:delNodes"/>
</component>

</page-specification>


问题是TableListTest的setCheckboxSelected函数中,执行断点debug时,如果NodeTest如上面所列,则执行NodeTest currNodeTest = getCurrentNode();时currNodeTest值为null,而同样的代码,不做任何改动,仅将NodeTest继承于File,则currNodeTest值为得到的列表中的值。真是莫名其妙,我已经三天都难以释怀了,网上也查了不少,始终没有找到答案,请各位指教,不胜感激。
...全文
381 3 打赏 收藏 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
YYZhQ 2007-01-19
  • 打赏
  • 举报
回复
呵呵,不好意思,一段时间没来,结贴了。
sqz007 2006-10-20
  • 打赏
  • 举报
回复
呵呵,现在用tapestry的人太少了
YYZhQ 2006-10-11
  • 打赏
  • 举报
回复
找到原因了,跟继承不继承File无关,只要重写NodeTest的toString方法就行了,如果不重写,它会使用Object基类的toString方法,返回类似于com.test.tapestry.global.TableNode@c1b531之类的字串,我想大概跟这个有关吧,File重写了toString方法,所以继承于File就继承了其toString方法,就不会出错。在网站上也搜到一些相关的东西,其中有这样一段话,虽不是很明白,但觉得似乎跟这个有关,先放在这里,供大家参考。
It appears that the reason is that the interceptor tries to add all request parameters to the ognl stack. Some of these parameters are "reserved" for the webwork portlet framework, such as webwork.portlet.mode, webwork.portlet.eventAction and so on. When adding these keys to the stack, it splits the dotted notation into a "path" to a property, which of course does not exist.
源码直接下载地址: https://pan.quark.cn/s/387d7c8f6289 在使用IE浏览器的过程中,偶尔会出现重置为默认配置操作未能顺利完成的现象。这种情况的发生可能源于多种因素,包括注册表项出现偏差、浏览器附加组件之间存在不兼容、操作系统授权设置不当或受到恶意程序影响等。针对这一挑战,我们可以通过一系列系统性的方法来逐一诊断和纠正。首先需要验证当前用户是否具备管理员级别的操作权限。在执行重置配置的操作时,必须确保IE浏览器是以管理员身份启动的。具体操作方式为,使用鼠标右键单击IE程序图标,并从弹出的菜单中选择“以管理员身份运行”这一选项。其次,应当检查是否存在恶意软件。恶意程序有时会非法修改浏览器的配置信息,从而阻碍重置过程的正常进行。用户可以借助Windows系统自带的Microsoft Safety Scanner进行检测,或者选择安装并使用第三方安全防护软件执行全面的系统扫描。紧接着,需要对浏览器的缓存数据以及Cookies文件进行清理。在IE浏览器界面中,通过访问“工具”菜单并选择“Internet选项”,然后在弹出的设置界面中,切换至“常规”标签页,并执行清除浏览历史记录的操作,此过程应包含Cookies和临时互联网文件。倘若上述步骤均未能解决问题,那么可以考虑禁用或移除那些可能引发冲突的浏览器附加组件。相关操作需要在“工具”菜单下找到并打开“管理加载项”,对可疑的插件进行禁用处理,并在浏览器重新启动后再次尝试执行重置操作。再者,修复IE浏览器相关的注册表配置也是至关重要的环节。注册表编辑器是一个功能强大的系统工具,任何不当的操作都可能导致严重的系统问题,因此在进行修改前必须创建系统还原点作为安全备份。用户可以通过按下“Win+R”组合...
内容概要:本文详细介绍了光伏储能虚拟同步发电机(VSG)并网仿真模型的Simulink实现方法,系统研究了光伏发电与储能系统融合VSG技术并入电网的动态特性与控制策略。通过构建完整的VSG控制模块,模拟其在并网过程中的虚拟惯性响应、频率调节能力和有功无功功率支撑特性,验证了该系统在增强电网稳定性、提升新能源并网适应性方面的有效性。模型全面涵盖光伏出力特性、储能系统充放电管理、VSG有功-无功解耦控制、下垂控制机制以及并网点动态响应等关键环节,并通过多种工况下的仿真分析,评估系统在不同运行条件下的动态性能与鲁棒性。; 适合人群:具备电力系统、新能源发电、自动控制等相关专业背景,熟悉Matlab/Simulink仿真环境,从事新能源并网、微电网控制或电力电子系统研究的科研人员、工程技术人员及研究生。; 使用场景及目标:①深入理解光伏储能系统如何通过VSG技术模拟同步发电机的惯性和阻尼特性以支持电网稳定;②掌握虚拟惯量控制、下垂控制等VSG核心控制策略在Simulink中的建模、参数设计与实现方法;③为新型电力系统中新能源并网的动态仿真、稳定性分析及控制策略优化提供可靠的模型基础和技术参考。; 阅读建议:建议结合所提供的仿真模型进行逐步操作与参数调试,重点关注VSG控制环路的结构设计、控制器参数整定及其对系统动态性能的影响,同时可将该模型拓展应用于多机并联、微电网孤岛/并网切换、多能源协同控制等更复杂的系统场景中进行进阶研究。

67,535

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧