再谈s:if的使用

上次遇到过的问题,费了好久才弄好,这次又遇到,有了一点新的体验。

中的判断,如果是数字判断一般都没有问题,问题会在字符串时候凸显出来。

尤其是中文字符串,几乎没有能够通过的,上一次是曲线救国,用了true和false着两个英文,如果非得用中文怎么办?

其实使用,就可以了,请注意,是单引号-双引号-中文-双引号- 单引号的顺序,这样才能够正确的解析中文字符串是否相等。

唔。。。终于可以做下一个部分了

more ...

Struts2中Ajax的使用

贴吧1.0差不多可以完成了,进入界面美化,我服务器验证写完之后,开始用jQuery写js。

使用了jQuery的UI,后来想加入Ajax验证,但是遇到了问题:

09-05-23 07:53 WARN [org.apache.struts2.dispatcher.Dispatcher] - Could not find action or result

There is no Action mapped for namespace / and action name AjaxLogin. - [unknown location]

我整整找了一个多小时,曾以为是action name的问题或者是package name, package namespace 的问题,为此我特意重新学习了一下他们的使用方法,但是仍然没有效果。

最后,终于在Google找到了一些资料:

struts2 json jquery ...

more ...

乱码之战

今天重新设计了贴吧的数据库,参考了WordPress的无外键,设置default的值,我取消了两个外键,仅保留一个对应CategoryId的外键。

修改数据库时候发现MySQL的charset还是'latin',就顺手修改成'utf-8'来保证统一,结果就出事了。

因为我修改了DAO,单元测试之后重新走一遍网页测试流程,结果发帖时候遇到乱码。

一回生两回熟,咱也不怕。

在Action里面设置logger,输出相应的数据,发现那里就是乱码,说明在Severlet或者Interceptor那里就出了问题。

仿照上次设置Tomcat字符集,详情见Eclipse中开发的Jave EE项目在Tomcat的部署 ,但是测试发现没有效果。

接着查看web.xml,发现里面还有Spring的filter,贴吧现阶段还没有加入Spring,删除,有一个编码过滤器org.apache.struts2 .dispatcher.FilterDispatcher,采用org.apache.struts2.dispatcher.FilterDispatcher可 以不适用,删除。

这么一删,就发现乱码问题解决了。

呵呵,只要人类还有很多语言,乱码仍然会存在,遇到了不要怕,慢慢调试就出来了

more ...

Struts2的s:if标签的Bug和曲线使用

贴吧的用户状态显示,登录和未登录应该是不同的div显示,我决定用做标签。

本来应该很简单的事情,却没有我预想中的情形出现,检查后发现失效了,代码如下:

<li>${session.userName}欢迎你</li>
<li><a href="Logout.action">注销</a></li>

Struts2的官方文档中标签库介绍写的很清楚,官方示例文档如下

<s:if test="%{false}">
<div>Will Not Be Executed</div>
</s:if>
<s:elseif test="%{true}">
<div>Will Be Executed</div>
</s:elseif>
<s:else>
<div>Will Not ...
more ...

OGNL中的操作符

使用此表达式,会生成一个文本框,并且,如果request.attribute中有loginNames属性,将会做为些文本框的默认值。

如果只使用#request.loginNames在struts2的标签内部,是不会显示任何值的,注意外面加上的%{}附号,才会被正常的使用。

如果希望如EL语言一样直接输出文件,如在一个之间的innerHTML文本为#request.loginNames的值,我们只要使用:使可以正常使用!

注:

1.${}是EL语言的 %{}这样的形式是ognl表过式语言的,在struts2的标签内部,使用%{}这样的形式,在标签外部可以使用${}EL语言的方式。如 果在struts2的标签内部使用${}这样的方式,会出现以下的错误提示:

According to TLD or attribute directive in tag file, attribute value does not accept any expressions

2 ...

more ...

乱码!又见乱码!

今天解决了贴吧发帖的问题,可以正确的发送到正确的分类了。

随后遇到的问题是发帖完毕返回 Category.action 时候,无法读取争取的贴吧分类数据,经过在 struts.xml 里的Category.action 里的 result 后面的url加入参数,可以读取正确categoryId了

本来想在result中加入param元素而不是在url后面加 ?categoryId=0来实现,但是尝试了好久,Google和官方文档都没有什么解决方案

其中遇到的一个问题是「&」这个符号不能直接使用,需要进行转义,用「&」来替代。

最后是categoryName的问题了,本来以为很简单,却遇到了编码问题,之前从Home.action转到Category.action能正确编码,像 ht tp://localhost:8080/PostBar/Category.action?categoryId=4&categoryName=%E9%9F%B 3%E4%B9%90 ...

more ...

一个Action提交的问题

贴吧在提交帖子时候必须提供贴吧分类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表达式?****

more ...

Struts2的编码问题

继续昨天的编码问题 我一直全部采用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>

根据我测试 ...

more ...

贴吧进度-09-05-07

今天写到创建帖子,在编码上遇到问题,jUnit下调用函数没有任何问题,那就表示问题出在Struts Filter捕获的文本上。

找了好几个方法都没有奏效。

游客登录情况下的Session还存在一点问题,原因是session类型转换上的问题,今天还没有好好的研究一下。

至此为止,登录注册写完了,静态校验写了一个毛胚,今天写完的现实帖子的列表,表现层用OGNL完成的,终于脱离开代码混杂的页面。

解决了一个tx.commit的错误,原来是《开发者突击》书上的代码有问题,我参考了Hibernate的官方文档,终于发现了错误的原因,tx.rollback ()应该在catch里面而不是final里面。

写着写着就感觉自己太多的不足,太多要学习的地方,加油!

more ...

No configuration found for the specified action

Tomcat 控制台打出如下警告:

WARN - No configuration found for the specified action: ‘xxxxx’in namespace: ‘/’. Form action defaulting to ‘action’ attribute’s literal value.

主要由于在写struts2表单时有给action指定全名,如:,直接写成即可,因为在struts.xml中struts.action.extension属性有指定啦。

有一个关于在namespace上的设置在 hi.baidu.com/mum0532/blog/item/128f9a64fa8594f5f6365457. html 。这位朋友讲的很透彻很详细

关于Struts2 的 namespace 详细解释 www.javaeye.com/topic/125743

more ...