论坛首页 入门技术论坛

DeBug 记事

浏览 1983 次
锁定老帖子 主题:DeBug 记事
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-10-21   最后修改:2009-03-04
以此记录编码过程中碰到的一些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里包含特殊字符必须转义, 字符'&'对应的转义字符为'&amp;',修改配置为:
<forward name="success" contextRelative="false" redirect="false" path="/listUsersAction.do?method=list&amp;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",就可以了。
   发表时间:2009-10-13  
请教关于“6.文本域、密码输入域在IE下显示长度不一致”的解决方案,
如果用的是struts标签生成html代码产生的长度不一致的怎么解决呢?

如下:
<html:text property="user"/>
<html:password property="password"/>
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics