临海观潮

  DonewsBlog  |  Donews首页  |  Donews社区  |  Donews邮箱  |  我的首页  |  联系作者  |  聚合   |  登录
  40篇文章 :: 0篇收藏:: 99篇评论:: 1个Trackbacks

公告

学而不思则罔,
思而不学则殆。
与我联系:
hotmail gmail

文章

收藏

相册

Blog友情链接

存档


正在读取评论……


使用AppFuse1.8.2遇到的问题

内容提要

这个部分将说明使用AppFuse1.8.2遇到的问题以及如何解决这些问题。

我会用这种格式说明我在 实际过程 中的操作。

目录

  • [1] 导入Eclipse以后无法编译
  • [2] 运行ant setup-db无法正确创建数据库
  • [3] 使用ant deploy无法发布应用
  • [4] 中文乱码问题
我实际使用的是webwork+spring+ hibernate遇到的,可能有些地方与默认的struts+spring+hibernate不一样,有些问题是使用了webwork引出的。使用本文提供的例子需要在创建自己的应用后运行ant install-webwork。

导入Eclipse以后有无法编译 [#1]

在Eclipse中将新创建的Myapp工程导入(import)后,Eclipse提示struts.jar和struts-el.jar两个包找不到。需要手工在Eclipse中把工程对这两个包的引用移除掉。
另外webwork相关的包引用没有添加到工程中,需要手工加入。至此Eclipse可以正常编译整个工程。
如果想彻底解决这个问题,应该考虑修改install-webwork任务。这个问题对使用影响不大,所以我就没有研究了。:-)

运行ant setup-db无法正确创建数据库[#2]

会出现app_user表无法创建的错误:

[schemaexport] (hbm2ddl.SchemaExport                167 ) Unsuccessful: create table app_user (username varchar(20) not null, version integer not null, password varchar(255) not null, first_name varchar(50) not null, last_name varchar(50) not null, address varchar(150), city varchar(50) not null, province varchar(100), country varchar(100), postal_code varchar(15) not null, email varchar(255) notnull unique, phone_number varchar(255), website varchar(255), password_hint varchar(255), enabled bit, primary key (username))[schemaexport] (hbm2ddl.SchemaExport                168 ) Specified key was too long. Max key length is 500

具体错误和解决办法可以参考AppFuse实践一——配置安装

AppFuse 1.8.1因为DBUnit的关系也会出现无法创建表的问题,这个问题在1.8.2已经改过来了。

使用ant deploy无法发布应用[#3]

运行ant setup-db创建数据库,运行ant setup-tomcat正确配置Tomcat以后,运行ant deploy发布应用会碰到下面的问题:

BUILD FAILEDC:\Myapp\build.xml:285: xdoclet.XDocletException: Couldn't find template: C:\Myapp\metadata\templates\struts_form.xdt

检查build.xml 285行,发现下面的的关于gen-forms的ant任务定义

    <!-- Generate ActionForms from POJOs -->    <target name="gen-forms" depends="prepare" unless="webdoclet.uptodate"        description="Generates ActionForms from POJOs">        <taskdef name="xdoclet" classname="xdoclet.DocletTask"            classpathref="xdoclet.classpath"/>        <!-- generate struts forms -->        <xdoclet destdir="${build.dir}/web/gen"            excludedtags="@version,@author"            addedtags="@xdoclet-generated at ${TODAY}"            force="${xdoclet.force}"            mergedir="metadata/web">            <fileset dir="src/dao"/>            <!-- generate struts forms -->            <actionform templateFile="metadata/templates/struts_form.xdt">                <packageSubstitution packages="model"                    substituteWith="webapp.form"/>            </actionform>        </xdoclet>    </target>

这个任务是使用struts用到的,使用webwork不需要用,去掉compile-web任务对gen-forms的引用,把build.xml文件中的的296行

<target name="compile-web" depends="package-service,stage-web,gen-forms" description="Compile web module">

修改成

<target name="compile-web" depends="package-service,stage-web" description="Compile web module">

然后再运行ant deploy,出现好多错

compile-web:     [echo] Compiling web...    [mkdir] Created dir: C:\myfile\Myapp\build\test\web\classes    [javac] Compiling 23 source files to C:\myfile\Myapp\build\web\classes    [javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\action\BaseAction.java:21: package com.opensymphony.webwork does not exist    [javac] import com.opensymphony.webwork.ServletActionContext;    [javac]                                 ^    [javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\action\BaseAction.java:22: package com.opensymphony.xwork does not exist    [javac] import com.opensymphony.xwork.ActionSupport;    [javac]                               ^    [javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\action\BaseAction.java:37: cannot resolve symbol    [javac] symbol  : class ActionSupport    [javac] location: class com.vicfuture.webapp.action.BaseAction    [javac] public class BaseAction extends ActionSupport {    [javac]                                 ^    [javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\action\FileUploadAction.java:11: package com.opensymphony.webwork does not exist    [javac] import com.opensymphony.webwork.ServletActionContext;    [javac]                                 ^    [javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\action\FileUploadAction.java:12: package com.opensymphony.xwork does not exist    [javac] import com.opensymphony.xwork.ValidationAware;    [javac]                               ^    [javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\action\FileUploadAction.java:14: cannot resolve symbol    [javac] symbol  : class ValidationAware    [javac] location: class com.vicfuture.webapp.action.FileUploadAction    [javac] public class FileUploadAction extends BaseAction implements ValidationAware {    [javac]                                                             ^    [javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\action\ReloadAction.java:16: package com.opensymphony.webwork does not exist    [javac] import com.opensymphony.webwork.ServletActionContext;    [javac]                                 ^    [javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\action\SignupAction.java:13: package com.opensymphony.webwork does not exist    [javac] import com.opensymphony.webwork.ServletActionContext;    [javac]                                 ^    [javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\action\UserAction.java:19: package com.opensymphony.webwork does not exist    [javac] import com.opensymphony.webwork.ServletActionContext;    [javac]                                 ^    [javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\interceptor\ExceptionHandlerInterceptor.java:11: package com.opensymphony.webwork does not exist    [javac] import com.opensymphony.webwork.ServletActionContext;    [javac]                                 ^    [javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\interceptor\ExceptionHandlerInterceptor.java:12: package com.opensymphony.xwork does not exist    [javac] import com.opensymphony.xwork.ActionInvocation;    [javac]                               ^    [javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\interceptor\ExceptionHandlerInterceptor.java:13: package com.opensymphony.xwork.interceptor does not exist    [javac] import com.opensymphony.xwork.interceptor.Interceptor;    [javac]                                           ^    [javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\interceptor\ExceptionHandlerInterceptor.java:24: cannot resolve symbol    [javac] symbol  : class Interceptor    [javac] location: class com.vicfuture.webapp.interceptor.ExceptionHandlerInterceptor    [javac] public class ExceptionHandlerInterceptor implements Interceptor {    [javac]                                                     ^    [javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\interceptor\ExceptionHandlerInterceptor.java:51: cannot resolve symbol    [javac] symbol  : class ActionInvocation    [javac] location: class com.vicfuture.webapp.interceptor.ExceptionHandlerInterceptor    [javac]     public String intercept(ActionInvocation invocation)    [javac]                             ^    [javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\interceptor\UserRoleAuthorizationInterceptor.java:9: package com.opensymphony.webwork does not exist    [javac] import com.opensymphony.webwork.ServletActionContext;    [javac]                                 ^    [javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\interceptor\UserRoleAuthorizationInterceptor.java:10: package com.opensymphony.xwork does not exist    [javac] import com.opensymphony.xwork.ActionInvocation;    [javac]                               ^    [javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\interceptor\UserRoleAuthorizationInterceptor.java:11: package com.opensymphony.xwork.interceptor does not exist    [javac] import com.opensymphony.xwork.interceptor.Interceptor;    [javac]                                           ^    [javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\interceptor\UserRoleAuthorizationInterceptor.java:24: cannot resolve symbol    [javac] symbol  : class Interceptor    [javac] location: class com.vicfuture.webapp.interceptor.UserRoleAuthorizationInterceptor    [javac] public class UserRoleAuthorizationInterceptor implements Interceptor {    [javac]                                                          ^    [javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\interceptor\UserRoleAuthorizationInterceptor.java:27: cannot resolve symbol    [javac] symbol  : class ActionInvocation    [javac] location: class com.vicfuture.webapp.interceptor.UserRoleAuthorizationInterceptor    [javac]     public String intercept(ActionInvocation invocation) throws Exception {    [javac]                             ^    [javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\interceptor\ValidationInterceptor.java:5: package com.opensymphony.webwork does not exist    [javac] import com.opensymphony.webwork.ServletActionContext;    [javac]                                 ^    [javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\interceptor\ValidationInterceptor.java:6: package com.opensymphony.xwork does not exist    [javac] import com.opensymphony.xwork.Action;    [javac]                               ^    [javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\interceptor\ValidationInterceptor.java:7: package com.opensymphony.xwork does not exist    [javac] import com.opensymphony.xwork.ActionContext;    [javac]                               ^    [javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\interceptor\ValidationInterceptor.java:8: package com.opensymphony.xwork does not exist    [javac] import com.opensymphony.xwork.ActionInvocation;    [javac]                               ^    [javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\interceptor\ValidationInterceptor.java:9: package com.opensymphony.xwork.interceptor does not exist    [javac] import com.opensymphony.xwork.interceptor.AroundInterceptor;    [javac]                                           ^    [javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\interceptor\ValidationInterceptor.java:10: package com.opensymphony.xwork.validator does not exist    [javac] import com.opensymphony.xwork.validator.ActionValidatorManager;    [javac]                                         ^    [javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\interceptor\ValidationInterceptor.java:17: cannot resolve symbol    [javac] symbol  : class AroundInterceptor    [javac] location: class com.vicfuture.webapp.interceptor.ValidationInterceptor    [javac] public class ValidationInterceptor extends AroundInterceptor {    [javac]                                            ^    [javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\interceptor\ValidationInterceptor.java:19: cannot resolve symbol    [javac] symbol  : class ActionInvocation    [javac] location: class com.vicfuture.webapp.interceptor.ValidationInterceptor    [javac]     protected void after(ActionInvocation dispatcher, String result) throws Exception {    [javac]                          ^    [javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\interceptor\ValidationInterceptor.java:22: cannot resolve symbol    [javac] symbol  : class ActionInvocation    [javac] location: class com.vicfuture.webapp.interceptor.ValidationInterceptor    [javac]     protected void before(ActionInvocation invocation) throws Exception {    [javac]                           ^    [javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\action\BaseAction.java:39: cannot resolve symbol    [javac] symbol  : method getClass ()    [javac] location: class com.vicfuture.webapp.action.BaseAction    [javac]     protected transient final Log log = LogFactory.getLog(getClass());    [javac]                                                           ^    [javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\action\BaseAction.java:90: cannot resolve symbol    [javac] symbol  : variable ServletActionContext    [javac] location: class com.vicfuture.webapp.action.BaseAction    [javac]         return ServletActionContext.getRequest();    [javac]                ^    [javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\action\BaseAction.java:98: cannot resolve symbol    [javac] symbol  : variable ServletActionContext    [javac] location: class com.vicfuture.webapp.action.BaseAction    [javac]         return ServletActionContext.getResponse();    [javac]                ^    [javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\action\FileUploadAction.java:27: cannot resolve symbol    [javac] symbol  : variable ServletActionContext    [javac] location: class com.vicfuture.webapp.action.FileUploadAction    [javac]             ServletActionContext.getServletContext().getRealPath("/resources") +    [javac]             ^    [javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\action\FileUploadAction.java:63: cannot resolve symbol    [javac] symbol  : variable SUCCESS    [javac] location: class com.vicfuture.webapp.action.FileUploadAction    [javac]         return SUCCESS;    [javac]                ^    [javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\action\FileUploadAction.java:67: cannot resolve symbol    [javac] symbol  : variable INPUT    [javac] location: class com.vicfuture.webapp.action.FileUploadAction    [javac]         return INPUT;    [javac]                ^    [javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\action\PasswordHintAction.java:41: cannot resolve symbol    [javac] symbol  : method getText (java.lang.String)    [javac] location: class com.vicfuture.webapp.action.PasswordHintAction    [javac]             args.add(getText("user.username"));    [javac]                      ^    [javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\action\PasswordHintAction.java:42: cannot resolve symbol    [javac] symbol  : method getText (java.lang.String,java.util.List)    [javac] location: class com.vicfuture.webapp.action.PasswordHintAction    [javac]             addActionError(getText("errors.required", args));    [javac]                            ^    [javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\action\PasswordHintAction.java:43: cannot resolve symbol    [javac] symbol  : variable INPUT    [javac] location: class com.vicfuture.webapp.action.PasswordHintAction    [javac]             return INPUT;    [javac]                    ^    [javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\action\PasswordHintAction.java:58: cannot resolve symbol    [javac] symbol  : method getText (java.lang.String)    [javac] location: class com.vicfuture.webapp.action.PasswordHintAction    [javac]             String subject = getText("webapp.prefix") + getText("user.passwordHint");    [javac]                              ^    [javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\action\PasswordHintAction.java:58: cannot resolve symbol    [javac] symbol  : method getText (java.lang.String)    [javac] location: class com.vicfuture.webapp.action.PasswordHintAction    [javac]             String subject = getText("webapp.prefix") + getText("user.passwordHint");    [javac]                                                         ^    [javac] The system is out of resources.    [javac] Consult the following stack trace for details.    [javac] java.lang.OutOfMemoryErrorBUILD FAILED

肯定是编译路径中没有加入webwork相关包的引用!手工修改Myapp目录下面properties.xml文件,加入webwork相关包的引用,在properties.xml文件第146行后面加上新的一行

<fileset dir="${webwork.dir}" includes="*.jar"/>

然后运行ant deploy 还是出错

BUILD FAILEDC:\myfile\Myapp\build.xml:54: C:\myfile\Myapp\build\web\gen not found.

去掉build.xml第54行

<srcfiles dir="${build.dir}/web/gen" includes="**/*.java"/>

还有第320行

<fileset dir="${build.dir}/web/gen"/>
实际上把这两句注释掉就可以了,这个是前面那个gen-forms任务用到的输出目录。

运行ant deloy,启动tomcat,可以正常工作了!

中文乱码问题 [#4]

界面上可以看到中文字符无法正常显示,有很多“?”。
怀疑是ApplicationResources_zh_CN.properties文件有问题,用eclipse打开编辑(在web\WEB-INF\classes目录下),果然看到是乱码。把早期版本的文件内容copy过来覆盖重新发布,一切正常了!



Trackback: http://tb.donews.net/TrackBack.aspx?PostId=618941


[点击此处收藏本文]  发表于2005年11月08日 1:02 PM




正在读取评论……

发表评论

大名:
网址:
验证码
评论