以此记录编码过程中碰到的一些bug以及debug过程简单分析。(以后会陆续增加并稍作整理)
今天开个头。。。
1.JSP页面里通过struts标签取bean的property,控制台报异常如下:
严重: Servlet.service() for servlet action threw exception
javax.servlet.jsp.JspException: No getter method for property: "×××" of bean: "×××"
a.检查bean的property以及getter/setter方法,未发现缺失;
b.分析property的命名,符合规范,排除与关键字冲突的可能;
c.在service implement 代码中找到了问题源头。原来是 返回 给 action 的 Entity list 中只是简单的堆砌了一组String变量,页面解析时,迭代出来的是一组object对象,所以找不到property的getter方法。------解决问题:在service implement 中,用bean对象的property保存String值,把bean对象添加到要返回的list。
2.struts-config.xml 中 forward path 配置,需指定两个以上的参数,使用特殊字符'&'连接参数,如下所示:
<forward name="success" contextRelative="false" redirect="false" path="/myAction.do?method=list&submitAction=init"/>
出现语法格式错误提示,应用无法运行。
google了一下,原因是XML里包含特殊字符必须转义, 字符'&'对应的转义字符为'&',修改配置为:
<forward name="success" contextRelative="false" redirect="false" path="/listUsersAction.do?method=list&submitAction=init"/>
就OK了。
3.自己写了个oracle的数据库脚本,执行后,在应用里使用Hibernate的JPA实现方式测试CRUD操作。数据表的Id是根据sequence实现自增。使用Junit测试时发现数据库里新增的数据是按50的自增量累加的。修改Id注释为:
@SequenceGenerator(name="my_seq", sequenceName="my_seq",allocationSize=1)
问题解决。(allocationSize指定了自增量为1,默认为50)
4.JPA主键自增表解决oracle/MySQL主键生成策略兼容问题,在主键的getter方法前定义:
@Id
@Column(name = "your_ID" ,unique = true, nullable = false)
@TableGenerator(
name="your_table_generator", table="hibernate_sequences",
pkColumnName="sequence_name", valueColumnName="sequence_next_hi_value",
pkColumnValue="your_table_seq", allocationSize=1, initialValue=0
)
@GeneratedValue(strategy = GenerationType.TABLE, generator="your_table_generator")
经测试需要手动创建存放序列的数据表hibernate_sequences,脚本如下:
DROP TABLE hibernate_sequences;
CREATE TABLE hibernate_sequences
(
sequence_name varchar(128) NOT NULL,
sequence_next_hi_value number(8),
CONSTRAINT hibernate_sequences_pkey PRIMARY KEY (sequence_name)
);
5.主键映射别名技巧:(如果你想在页面用'id'来获取表主键的属性,而实际上主键的命名并不是'id'而是其它的,比如'seqNo',一个小花招就可以略过这个问题了)
/**
* @see your jsp ,property 'seqNo' can be fetched as 'id'
*/
@Transient
public Long getId()
{
return seqNo;
}
6.文本域、密码输入域在IE下显示长度不一致,加入如下属性,问题解决:
style="width:150px"
7.Eclipse 下无法保存 javascript 文件:
依次选择 window>>preferences>>general>>content types
在右边的窗口中打开列表,选中"JavaScript",在下面的"default encoding"右边的输入框中输入"GBK"或"GB2312",再点"update"按钮,我选的中"GBK",就可以了。