Struts2初学devMode发展模式,更改action出现映射错误解决办法(原因是版本问题,轻松解决)
2014-09-30 15:19
671 查看
STRUTS2
1. 写好最简单的hello world项目后,无法通过浏览器访问到hello.jsp页面,提示没有资源。
学习structs2的时间,已经更新到了2.3.16了,structs中的很多jar包都已和视频中的不一样了。试过只包含部分基础的jar包,结果发现无法访问hello.jsp页面,提示没有资源。后来,查看tomcat的日志时,发现启动这个项目有问题,提示有错误。后来将struct2中的struts-2.3.16\apps\struts2-blank\WEB-INF\lib中所有jar包都加入了项目中,项目就可以成功启动了。
后来自己建项目的时候,发现使用action进行页面处理的情况下,服务器端报404 resource not avaible的错误,而直接访问jsp页面没有错误。后来发现,是自己忘了配置web.xml中的struts2相关的filter所致。除此之外,struts.xml文件放错位置,会提示说找不到对应的action(虽然明明写有那个action)。struts.xml文件应该放在src文件夹下。
另外,如果直接复制其他项目来新建一个自己的项目,一定要记得修改web选项。右键单击自己的项目,选择properties->MyEclipse->Web,在右侧的面板上,修改Web context-root中的内容与自己的项目名称一致。
2. 设置devMode = true,但没有效果。
视频中提到,将<constant name="struts.devMode" value="true" />加入package前就可进入开发模式,当程序做出修改时,无需重启tomcat即可看到修改后的效果。但实际操作中发现,仅设置devMode为true,并不能达到效果。加入<constant name="struts.configuration.xml.reload" value="true"/>到package前,就可以启动开发模式了。(有的时候感觉添加了这句也不太靠谱,有时会出出修改package name
和action name的时候,需重启服务器才有效果的情况。)
3. 不能使用DMI动态方法调用。使用动态方法DMI时系统出错,提示说没有相应的方法
由于struct2版本更新,系统中默认将DMI方法相关设置参数的值设为false。如需使用,需要在package前设置参数如下:<constant name="struts.enable.DynamicMethodInvocation" value="true" />。可能在制作视频时,官网较为推荐该使用!符号调用方法的DMI方法。但目前,官网不太推荐使用这种了。官网现在推荐的是使用method方法+通配符方法来进行方法的调用。若使用该方法,可将参数还原为默认值:<constant
name="struts.enable.DynamicMethodInvocation" value="false" />
4. 使用<s:fielderror fieldname = "name" />时报错
查了下官网的文档,文档上说可以用<s:fielderror />来显示所有错误,试了下,可行;文上还说可以用<s:fielderror fieldname = "filed1" />来显示个别field的错误,试了下,不行。不知道为什么。先在这里记录下。另外,<s:property value = "error.XXX">,这个XXX的值也不为filed的,而是传入field的值。这个和视频上说的不一样。如果是这样,不太方便显示第n个错误提示。因为并不知道用户会传什么值给field。执行了一下视频中带的源代码,发现源代码与视频中讲到的情况一样。可能是由于struct2升级的原因导致的不一致?
5. dynamic result时,在struts.xml中写<result>${r}</result>报错。
可能是由于struts2版本不一致,也可能是myeclipse版本不一致,此处报错。应改为:<result>${r}.jsp</result>,并在对应的action文件中,将r的值改为jsp文件的文件名部分。这样,程序就能正常运行了。
6. result with params时,在struts.xml中写<result>/xxx.jsp?t=${type}</result>,myeclipse报错。
这是由于MyEclipse 10对动态配置结果集支持不好,可以忽略这个错误提示,执行上是正常的。下面是网上的一个解决方案: Window->prefrences->MyEclipse->Validation->Struts2 Validator->去掉build的勾。去掉之后还是会有报错的,需要重启一下MyEclipse才行。
7. 自己写代码练习时,使用domainModel方式从页面向action传递参数,参数总是传递不进去。
自己的代码如下:index.jsp页面:
action.java的代码如下:
结果,程序在action.java中的System.out.println处出错,说是有空指针。找了半天,最后发现,是由于前台使用u作为传递值的实例名,而后台的类中,却使用user作为接收值的实例名。前后台实例名不一致,使得后台的user无法初始化,所以打印值是会出错。将前台的实例名改为user后,程序即可正确运行。
HIBERNATE
1. 删除数据表时提示有外键,无法删除(提示:a foreign key constraint fails)
因为husband和wife中都存在外键,删除外键wifeId和hs_id时,提示该字段不为外键。可以设置mysql,使得删除表时不照顾外键的情况:
1. 写好最简单的hello world项目后,无法通过浏览器访问到hello.jsp页面,提示没有资源。
学习structs2的时间,已经更新到了2.3.16了,structs中的很多jar包都已和视频中的不一样了。试过只包含部分基础的jar包,结果发现无法访问hello.jsp页面,提示没有资源。后来,查看tomcat的日志时,发现启动这个项目有问题,提示有错误。后来将struct2中的struts-2.3.16\apps\struts2-blank\WEB-INF\lib中所有jar包都加入了项目中,项目就可以成功启动了。
后来自己建项目的时候,发现使用action进行页面处理的情况下,服务器端报404 resource not avaible的错误,而直接访问jsp页面没有错误。后来发现,是自己忘了配置web.xml中的struts2相关的filter所致。除此之外,struts.xml文件放错位置,会提示说找不到对应的action(虽然明明写有那个action)。struts.xml文件应该放在src文件夹下。
另外,如果直接复制其他项目来新建一个自己的项目,一定要记得修改web选项。右键单击自己的项目,选择properties->MyEclipse->Web,在右侧的面板上,修改Web context-root中的内容与自己的项目名称一致。
2. 设置devMode = true,但没有效果。
视频中提到,将<constant name="struts.devMode" value="true" />加入package前就可进入开发模式,当程序做出修改时,无需重启tomcat即可看到修改后的效果。但实际操作中发现,仅设置devMode为true,并不能达到效果。加入<constant name="struts.configuration.xml.reload" value="true"/>到package前,就可以启动开发模式了。(有的时候感觉添加了这句也不太靠谱,有时会出出修改package name
和action name的时候,需重启服务器才有效果的情况。)
3. 不能使用DMI动态方法调用。使用动态方法DMI时系统出错,提示说没有相应的方法
由于struct2版本更新,系统中默认将DMI方法相关设置参数的值设为false。如需使用,需要在package前设置参数如下:<constant name="struts.enable.DynamicMethodInvocation" value="true" />。可能在制作视频时,官网较为推荐该使用!符号调用方法的DMI方法。但目前,官网不太推荐使用这种了。官网现在推荐的是使用method方法+通配符方法来进行方法的调用。若使用该方法,可将参数还原为默认值:<constant
name="struts.enable.DynamicMethodInvocation" value="false" />
4. 使用<s:fielderror fieldname = "name" />时报错
查了下官网的文档,文档上说可以用<s:fielderror />来显示所有错误,试了下,可行;文上还说可以用<s:fielderror fieldname = "filed1" />来显示个别field的错误,试了下,不行。不知道为什么。先在这里记录下。另外,<s:property value = "error.XXX">,这个XXX的值也不为filed的,而是传入field的值。这个和视频上说的不一样。如果是这样,不太方便显示第n个错误提示。因为并不知道用户会传什么值给field。执行了一下视频中带的源代码,发现源代码与视频中讲到的情况一样。可能是由于struct2升级的原因导致的不一致?
5. dynamic result时,在struts.xml中写<result>${r}</result>报错。
可能是由于struts2版本不一致,也可能是myeclipse版本不一致,此处报错。应改为:<result>${r}.jsp</result>,并在对应的action文件中,将r的值改为jsp文件的文件名部分。这样,程序就能正常运行了。
6. result with params时,在struts.xml中写<result>/xxx.jsp?t=${type}</result>,myeclipse报错。
这是由于MyEclipse 10对动态配置结果集支持不好,可以忽略这个错误提示,执行上是正常的。下面是网上的一个解决方案: Window->prefrences->MyEclipse->Validation->Struts2 Validator->去掉build的勾。去掉之后还是会有报错的,需要重启一下MyEclipse才行。
7. 自己写代码练习时,使用domainModel方式从页面向action传递参数,参数总是传递不进去。
自己的代码如下:index.jsp页面:
HIBERNATE
1. 删除数据表时提示有外键,无法删除(提示:a foreign key constraint fails)
因为husband和wife中都存在外键,删除外键wifeId和hs_id时,提示该字段不为外键。可以设置mysql,使得删除表时不照顾外键的情况:
相关文章推荐
- 打开office出现错误:向程序发送命令时出现问题 无法更改 中注册的office 加载项的连接状态 解决办法
- Tensorflow由于版本问题出现的几种错误及解决办法
- mysql4.1以上版本连接时出现Client does not support authentication protocol #1251错误问题解决办法
- struts2出现No result defined for action。。。。。问题的解决办法
- mysql4.1以上版本连接时出现Client does not support authentication protocol #1251错误问题解决办法
- FOXPRO 程序在Winxp下面 insufficient memory 问题出现的原因以及解决办法
- 程序Debuge版本编译通过,Release版本出现链接错误,解决办法
- JavaScript出现“不能执行已释放的Script代码”错误的原因及解决办法
- 出现 "System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本" 错误的解决办法
- 用oralce连接.net客户端出现问题:“数据连接不成功,请检查该数据库是否已启动尝试加载oracle客户端时引发BadImageFormatException.如果在安装32位Oracle客户端组件的情况下以64位模式运行,”的解决办法
- struts2中form提交到action中的中文参数乱码问题解决办法(包括取中文路径)
- 还原数据库时出现的问题 “设备激活错误”的解决办法
- mysql4.1以上版本连接时出现Client does not support authentication protocol问题解决办法
- mysql4.1版本连接时出现Client does not support authentication protocol问题解决办法
- 从 IClassFactory 为 CLSID 为 {00024500-0000-0000-C000-000000000046} 的 COM 组件创建实例失败,原因是出现以下错误: 8001010a解决办法
- mysql4.1以上版本连接时出现Client does not support authentication protocol问题解决办法
- 出现“不能执行已释放的Script代码”错误的原因及解决办法
- mysql4.1以上版本连接时出现Client does not support authentication protocol问题解决办法
- 使用网络目录映射虚拟目录出现 500.19 权限不足问题的一个解决办法
- 在VC6下编译MTL程序,出现的C4786错误的原因和解决办法