DeBug 记事

本文分享了Struts框架及JPA技术在实际项目中遇到的问题及解决方案,包括Struts标签调用Bean属性异常、配置文件语法错误修正、JPA在不同数据库间的主键生成策略等。
以此记录编码过程中碰到的一些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",就可以了。
MATLAB主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性内容概要:本文主要介绍了一种在MATLAB环境下实现的主动噪声和振动控制算法,该算法针对较大的次级路径变化具有较强的鲁棒性。文中详细阐述了算法的设计原理与实现方法,重点解决了传统控制系统中因次级路径动态变化导致性能下降的问题。通过引入自适应机制和鲁棒控制策略,提升了系统在复杂环境下的稳定性和控制精度,适用于需要高精度噪声与振动抑制的实际工程场景。此外,文档还列举了多个MATLAB仿真实例及相关科研技术服务内容,涵盖信号处理、智能优化、机器学习等多个交叉领域。; 适合人群:具备一定MATLAB编程基础和控制系统理论知识的科研人员及工程技术人员,尤其适合从事噪声与振动控制、信号处理、自动化等相关领域的研究生和工程师。; 使用场景及目标:①应用于汽车、航空航天、精密仪器等对噪声和振动敏感的工业领域;②用于提升现有主动控制系统对参数变化的适应能力;③为相关科研项目提供算法验证与仿真平台支持; 阅读建议:建议读者结合提供的MATLAB代码进行仿真实验,深入理解算法在不同次级路径条件下的响应特性,并可通过调整控制参数进一步探究其鲁棒性边界。同时可参考文档中列出的相关技术案例拓展应用场景。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值