乱码之战
今天重新设计了贴吧的数据库,参考了WordPress的无外键,设置default的值,我取消了两个外键,仅保留一个对应CategoryId的外键。 修改数据库时候发现MySQL的charset还是’latin’,就顺手修改成’utf-8’来保证统一,结果就出事了。 因为我修改了DAO,单元测试之后重新走一遍网页测试流程,结果发帖时候遇到乱码。 一回生两回熟,咱也不怕。 ...
今天重新设计了贴吧的数据库,参考了WordPress的无外键,设置default的值,我取消了两个外键,仅保留一个对应CategoryId的外键。 修改数据库时候发现MySQL的charset还是’latin’,就顺手修改成’utf-8’来保证统一,结果就出事了。 因为我修改了DAO,单元测试之后重新走一遍网页测试流程,结果发帖时候遇到乱码。 一回生两回熟,咱也不怕。 ...
贴吧的用户状态显示,登录和未登录应该是不同的div显示,我决定用做标签。 本来应该很简单的事情,却没有我预想中的情形出现,检查后发现失效了,代码如下: <li>${session.userName}欢迎你</li> <li><a href="Logout.action">注销</a></li> Struts2的官方文档中标签库介绍写的很清楚,官方示例文档如下 ...
贴吧最基本的功能写完了,正好可以应付数据库设计课的实验。于是我准备把贴吧的项目从Eclipse的开发环境中移植出来,在Tomcat中进行部署。 也许是习惯了Eclipse提供的便利,这个小小的移植,居然难倒了我,直接把Eclipse里的PostBar考出,根本不能运行,直接报404错误。Google 上也没有提供详细的步骤,也许大家都觉得这个问题很简单吧,呵呵。 我琢磨了一会,终于整理出了头绪。 1.修改Apache-conf-server.xml这个文件,修改其中一段…如下所示 ...
<s:textfield name=“loginName” value="%{#request.loginNames}"/> 使用此表达式,会生成一个文本框,并且,如果request.attribute中有loginNames属性,将会做为些文本框的默认值。 如果只使用#request.loginNames在struts2的标签内部,是不会显示任何值的,注意外面加上的%{}附号,才会被正常的使用。 如果希望如EL语言一样直接输出文件,如在一个之间的innerHTML文本为#request.loginNames的值,我们只要使用:<s:pr operty value="#request.loginNames" />使可以正常使用! ...
贴吧在提交帖子时候必须提供贴吧分类id categoryId,但是怎么把这个id提交到PostAction就比较麻烦了,在jsp页面中我试了好多办法,尝试使 用param和hidden(baidu用的hidden)标签,但是都不能读出cagegory.jsp页面的categoryId值。 最后我索性用试所有的表达式 <s:hidden name="topicCategoryId" value="%{#categoryId}" /> <s:hidden name="topicCategoryId" value="#categoryId" /> <s:hidden name="topicCategoryId" value="%{categoryId}" /> 最后一个果然有效。。。 貌似记得这是OPGL表达式?****
今天解决了贴吧发帖的问题,可以正确的发送到正确的分类了。 随后遇到的问题是发帖完毕返回 Category.action 时候,无法读取争取的贴吧分类数据,经过在 struts.xml 里的Category.action 里的 result 后面的url加入参数,可以读取正确categoryId了 本来想在result中加入param元素而不是在url后面加 ?categoryId=0来实现,但是尝试了好久,Google和官方文档都没有什么解决方案 其中遇到的一个问题是「&」这个符号不能直接使用,需要进行转义,用「&」来替代。 ...
继续昨天的编码问题 我一直全部采用UTF-8格式,而且在jUnit测试中并没有问题,说明是在Struts进行数据收集时候出错。 Google之后,根据网上一些建议修改web.xml struts.xml 但都没有效果。 网上建议在web.xml中添加 : <filter> <filter-name>struts-cleanup</filter-name> <filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp </filter-class> </filter> <filter-mapping> <filter-name>struts-cleanup</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> 来设定本地化和编码,然后在struts.xml中添加过滤器 <constant value="UTF-8" name="struts.i18n.encoding"></constant> <constant value="UTF-8" name="struts.locale"></constant> 根据我测试,都没有效果。 我检查完JSP页面编码和本地文件编码,也都不存在问题。 最后我在一片帖子中看到讲WebWork2和Struts2的一些过滤器不一样,那位高手遇到和我几乎一样的问题,然后他使用另外一个Filter : ...
晚上开始写贴吧分类,把class改成category,规避了关键字class,也显得更合理,百度的分类就是ct 然后在分类上遇到一个小问题,category_father在数据库是integer类型,可以为null,因为存在根分类,在这种情况下用Hibernate读取 Category时会产生错误 在jUnit单元测试中就通不过,错误为 org.hibernate.PropertyAccessException: Null value was assigned to a property Google后,发现Category中定义categoryFather为int类型,是不支持null的,需要改为Wrapper类Interger ...
今天用Log4j时候,感觉只显示message讯息太少了,直觉上这些流行的工具应该会提供更强大的定制功能,就去google了一下 果不其然:相关配置参数如下 # Pattern to output the caller's file name and line number. # %m 输出代码中指定的消息 # %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL # %r 输出自应用启动到输出该log信息耗费的毫秒数 # %c 输出所属的类目,通常就是所在类的全名 # %t 输出产生该日志事件的线程名 # %n 输出一个回车换行符,Windows平台为「rn」,Unix平台为「n」 # %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921 # %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。 通过配置这些参数可以定制自己想要的记录。 ...
今天写到创建帖子,在编码上遇到问题,jUnit下调用函数没有任何问题,那就表示问题出在Struts Filter捕获的文本上。 找了好几个方法都没有奏效。 游客登录情况下的Session还存在一点问题,原因是session类型转换上的问题,今天还没有好好的研究一下。 至此为止,登录注册写完了,静态校验写了一个毛胚,今天写完的现实帖子的列表,表现层用OGNL完成的,终于脱离开代码混杂的页面。 解决了一个tx.commit的错误,原来是《开发者突击》书上的代码有问题,我参考了Hibernate的官方文档,终于发现了错误的原因,tx.rollback ()应该在catch里面而不是final里面。 ...