struct应用问题!!!高手请进!!!

donotsmoking 2008-10-10 03:02:58
现有一个项目中一个模块(添加、修改):添加和修改改所定位到的界面是同一个.jsp界面,是用STRUCTS标签作的界面。
提问:::
为什么当选择要修改的项时,能把所修改的具体信息,填充到其界面,即添加和修改所同有的界面。前提是:没有任何特殊处理,而添加时则信息为空白。
其修改中查找的代码如下:::
IbaseService service = (IbaseService)this.getObject("BaseService");
ActionErrors errors=new ActionErrors();
Long id = new Long(httpServletRequest.getParameter("id"));
BbsqForm form=(BbsqForm)actionForm;

try {
Bbsq obj=(Bbsq)service.findObject(Bbsq.class,id);
BeanUtil.beancopyProperties(form,obj);
return actionMapping.findForward(STRADD);
}
STRADD所对应的界面和添加的界面是一致的:::::
STRUCT标签有这种功能吗????????

...全文
110 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
fosjos 2008-10-16
  • 打赏
  • 举报
回复
Long id = new Long(httpServletRequest.getParameter("id"));
添加的时id没有值,findObject返回空的对象,beancopyProperties后form各属性就是空了
donotsmoking 2008-10-15
  • 打赏
  • 举报
回复

yingShisscWang和jumpheightway 能不能给个具体的例子!!邮箱为::shmilykxb@126.com


jumpheightway 2008-10-11
  • 打赏
  • 举报
回复
struts配置文件的action中有两个属性,一个是name,一个是attribute
name的主要作用是表单提交提取数据
而attribute的作用是action返回数据是时候使用
能够使用的前提是必须要使用struts标签才有效
否则只能够通过scope属性的值点getAttribute取出来才能够用
如果不用attribute属性
action中类似功能的代码为:
request/session.setAttribute();
页面使用通过:
request/session.getAttribute();
这样效果就是一样的了
numbcola 2008-10-10
  • 打赏
  • 举报
回复
如果你是想说,由于页面的重用而导致在添加的时候,文本框里显示的都是null,你想让他变成空白的话,那就很简单,你做个小方法,把这个做一个新的对象,全部的字段都设置为“”(空字符串),然后传过去。
yingShisscWang 2008-10-10
  • 打赏
  • 举报
回复
你是想问为什么添加画面页面的项目是空白,而修改的页面项目是有值的?

假设你的actionform已经在struts-config里设定为“request”,取名叫testform
那么当页面加载的时候,struts采取的策略是,首先判断在request里是否存在名字叫testform的ActionForm类实例,如果存在,就直接用这个实例,那样如果页面上的项目名字和form中的名字相同就能直接重form中读到值,修改画面的值就是这么出来的。

如果request里没有叫testform的ActionForm实例,struts会自动的定义一个testform实例,当然,这个实例是未经赋值的,画面上也就没有值。
如果添加和修改用的同一个画面,那么画面加载的时候request里formbean的状态应该是不一样的,具体看你的代码了。

不知道你想问的是不是这个,我随便说说我了解的一些基础知识。

donotsmoking 2008-10-10
  • 打赏
  • 举报
回复
我知道这种(从界面对应对FORM中,然后再把form中的值对应到实体BEAN,用HIBERNATE的ORM进行插入操作),能返过来(不用REQUEST或SESSION存),比如修改操作,选择要修改的项,通过
IbaseService service = (IbaseService)this.getObject("BaseService");
ActionErrors errors=new ActionErrors();
Long id = new Long(httpServletRequest.getParameter("id"));
BbsqForm form=(BbsqForm)actionForm;

try {
Bbsq obj=(Bbsq)service.findObject(Bbsq.class,id);
BeanUtil.beancopyProperties(form,obj);
return actionMapping.findForward(STRADD);
} 然后再从前台界面中取出!!!

Valkyriebbi 2008-10-10
  • 打赏
  • 举报
回复
恩~~~~~~~~
  • 打赏
  • 举报
回复
STRUCT标签当然有这种功能!非常实用!只要form中属性和页面上控件的名称一一对应就可以了!
在编写程序的过程中,我遇到了这样的需求:在基于Windows 9x 或 Windows NT4.0 的程序中,要求确定键盘、鼠标处于空闲状态的时间。查询了有关资料文档以后,发现Windows 9x和Windows NT4.0 没有提供API或系统调用来实现这样的功能。但是,在Windows 2000中提供了一个新的函数:GetLastInputInfo(),这个函数使用结构 LASTINPUTINFO 作为参数: LASTINPUTINFO lpi; lpi.cbSize = sizeof(lpi); GetLastInputInfo(&lpi); 调用函数GetLastInputInfo()以后, 结构成员lpi.dwTime 中的值便是自上次输入事件发生以后的毫秒数。这个值也就是键盘、鼠标处于空闲状态的时间。可惜的是这个函数只能在Windows 2000中使用,Windows 9x 或Windows NT4.0不提供此API函数。那么,如何在Windows 9x 或Windows NT4.0中实现GetLastInputInfo()的功能呢?笔者的方法是利用系统钩子对键盘、鼠标进行监控。 Windows中的钩子实际上是一个回调函数,当用户有输入动作的时候,Windows要调用这个函数。比较典型的系统钩子应用就是键盘钩子和鼠标钩子: HHOOK g_hHookKbd = NULL; HHOOK g_hHookMouse = NULL; 在Windows中,一个系统(相对于一个特定进程而言)钩子必须用一个动态链接库(DLL)来实现。不妨将这个动态链接库命名为IdleUI.dll。 这个动态链接库在Windows 9x和Windows NT4.0 中实现了GetLastInputInfo()的功能。IdleUI.dll中有三个函数: BOOL IdleUIInit() void IdleUITerm(); DWORD IdleUIGetLastInputTime(); IdleUIInit()是环境初始化函数,IdleUITerm()是环境清理函数,分别在MFC应用程序的InitInstance() 和 ExitInstance()中调用它们。当用IdleUIInit()做完初始化后,就可以调用第三个函数IdleUIGetLastInputTime()来获取最后一次输入事件后的时钟。从而实现与GetLastInputInfo()一样的功能。程序TestIdleUI.exe是用来测试IdleUI动态库的,程序中调用了IdleUIInit 和 IdleUITerm,同时在程序的客户区中间显示键盘、鼠标空闲的秒数。 void CMainFrame::OnPaint() { CPaintDC dc(this); CString s; DWORD nsec = (GetTickCount() - IdleUIGetLastInputTime())/1000; s.Format( "鼠标或键盘空闲 %d 秒。",nsec); CRect rc; GetClientRect(&rc); dc.DrawText(s, &rc, DT_CENTER|DT_VCENTER|DT_SINGLELINE); } 图一显示了TestIdleUI运行时的情形。 图一 TestIdleUI运行画面 为了连续的显示,TestIdleUI设置刷新定时器间隔为一秒。 void CMainFrame::OnTimer(UINT) { Invalidate(); UpdateWindow(); } 运行TestIdleUI,当键盘和鼠标什么也不做时,可以看到计时器跳动,当移动鼠标或按键时,计时器又恢复到零,这样就实现了对输入设备空闲状态的监控。实现细节请看下面对IdleUI.dll工作原理的描述: 首先调用IdleUIInit ()进行初始化,安装两个钩子:一个用于监控鼠标输入,一个用于监控键盘输入。 HHOOK g_hHookKbd; HHOOK g_hHookMouse; g_hHookKbd = SetWindowsHookEx(WH_KEYBOARD,MyKbdHook,hInst, 0); g_hHookMouse = SetWindowsHookEx(WH_MOUSE,MyMouseHook,hInst, 0); 当用户移动鼠标或按下键盘键时,Windows调用其中的一个钩子并且钩子函数开始记录时间: LRESULT CALLBACK MyMouseHook(in

67,538

社区成员

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

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