◎筱米加步枪◎.Blog

Happy coding

Could not find template in cache 错误的解决方法

今天,做Strust2的东东,启动发现报如下错误:

Could not find template in cache, creating new one的错误

百度之得解决方法,可以在Action的地方写入如下代码:(我是在BaseAction中的构造函数写入)

	public BaseAction(){
		try {
			freemarker.log.Logger.selectLoggerLibrary(freemarker.log.Logger.LIBRARY_NONE);
			logger.debug("加载[freemarker]成功");
		} catch (ClassNotFoundException e) {
			logger.error("未找到类",e);
		}
	}

而后问题就消失了..

Strust2的json插件

最近在研究前端的交互部分,涉及到Struts2中使用json插件,总结下近日来看的一些材料和一些理解。以下这段摘自网上:

Json是一种轻量级的数据交换格式,JSon插件提供了一种名为json的ActionResultType 。一旦为Action指定了该结果处理类型,JSON插件就会自动将Action里的数据序列化成JSON格式的数据,并返回给客户端物理视图的JavaScript。简单的说,JSON插件允许我们JavaScript中异步的调用Action,而且Action不需要指定视图来显示Action的信息显示。而是由JSON插件来负责具体将Action里面具体的信息返回给调用页面。

其中使用方法中需要注意的几点:

1.要使用json插件就要在strust配置文件中的包继承关系改成json-default,如:

<package name="json" namespace="/json" extends="json-default">

2.选择序列化的结果可在strust中配置,可选择配置示例如下:

<!-- 序列化所有以get开头的方法 -->  
<result type="json" name="user"></result>    

<!-- 只序列化包含user.id属性 -->
<result type="json" name="user">
	<param name="includeProperties">user\.id</param>
</result>    

<!-- 不序列化user对象的任何属性 -->
<result type="json" name="list">
	<param name="excludeProperties">user</param>
</result>    

<!-- 只序列化根对象中的user -->
<result type="json">
	<param name="root">user</param>
</result>     

<!-- 不序列化父类中的属性对象-->
<result type="json">        
	<param name="ignoreHierarchy">false</param>
</result>

3.对一些属性的特殊处理可在action代码中去特殊的序列化,如:

[3.1]默认情况下以get方法开头的都会序列化,如果不想序列化,在action中的方法要打上注解
@JSON(serialize=false)

[3.2]如果在属性get方法上面加@JSON(name="newName"),则返回的json数据中名称是指定的新名称


[3.3]@JSON(format ="yyyy-MM-dd'T'HH:mm:ss")设置用于格式化输出、解析日期表单域的格式。

[3.4]@JSON(deserialize=true)设置是否反序列化该属性

Cannot find ActionMappings or ActionFormBeans collection错误

今天,将一个工程改成EJB时候,使用Struts的Action访问,出现Cannot find ActionMappings or ActionFormBeans collection错误。

百度之~~得:可能少了Struts的包,于是将Struts的包再重新导入一次,解决问题。

网上说,这类问题可能还可能有如下问题所导致:备忘下~~

①Web.xml未初始化问题
少了一个<load-on-startup>0</load-on-startup>
这样开始是没有加载这个类,就没有初始化struts-config.xml,所以找不到actionmappings actionformbeans collection。
②struts-config.xml问题
③jar包不全或版本不对
也有可能导致这个问题,从stuts例子里面拷过来就好了。struts1.x自带共10个jar包。
④编译问题
有可能Action和Formbean没有编译,也会有这个问题,检查一下有没有对应的class文件就好。class路径不对可能也会导致这个问题。
⑤版本问题
用的servlet容器和struts版本不对或这两个版本协调有问题。

Strust异常:JasperException①NestedWriteNestingTei

昨日,基于公司的框架,并使用了Struts进行了开发和配置信息,结果访问时出现如下异常:

Failed to load or instantiate TagExtraInfo class: 
org.apache.struts.taglib.nested.NestedWriteNestingTei

网上说是因为包冲突问题,于是乎得到解决方案如下:

只要删除掉部署后的 /WEB-INF/lib 下的 jsp-api.jarservlet-api.jar 包即可~~

struts-config.xml中<forward>标签path属性传多个参数注意点

今天,在作一道练习时

在struts-config.xml中配置<forward>标签时候,通过地址传递参数,想当然的把参数加在后面:

配置信息如下:(这是错误的)

 

  1. <forward name="editItemFinish" path="/user.do?method=init&forward=edit"></forward>

结果提示下列信息:

原先以为<forward>不能传递多个参数 ,后来百度了一下。发现是可以的。

解决方法相当的简单:

只需将&符号用&amp;来代替即可:

正确代码如下:

  1. <forward name="editItemFinish" path="/user.do?method=init&amp;forward=edit"></forward>