我正在使用 Hibernate 3.0 和 Struts 2。我正在为
@GeneratedValue
一代使用 id
。
当我保存客户详细信息时,我有一个客户屏幕,我想使用 新插入的
customerId
,因为仅根据该ID,我将保存第二页详细信息
为此我正在使用类似
someDAO.save(customer);
customerId = customer.getCustomerId();
我在保存并使用 Struts 2 后获得了客户对象值
redirectAction
我将 customerId
转发到第二页,它工作正常,但我在控制台中得到 WARN
:
Caught OgnlException while setting property 'applicationId' on type 'org.apache.struts2.dispatcher.ServletActionRedirectResult'.
ognl.NoSuchPropertyException: org.apache.struts2.dispatcher.ServletActionRedirectResult.applicationId
at ognl.ObjectPropertyAccessor.setProperty(ObjectPropertyAccessor.java:132)
at com.opensymphony.xwork2.util.OgnlValueStack$ObjectAccessor.setProperty(OgnlValueStack.java:68)
at ognl.OgnlRuntime.setProperty(OgnlRuntime.java:1656)
at ognl.ASTProperty.setValueBody(ASTProperty.java:101)
at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:177)
at ognl.SimpleNode.setValue(SimpleNode.java:246)
你可以忽略这一点的最佳方法,
但是 redirectAction 使用 ActionMapperFactory 提供的 ActionMapper 将浏览器重定向到调用指定操作和(可选)namespace 的 URL。 OGNL 尝试使用源页面上指定的值设置地图 html 元素,并将这些值推送到valuestack中。有时,OGNL尝试将值与在源页面的操作类中指定的设置器进行映射,但无法设置值并导致警告。
您可以尝试显式分配 param's 来抑制警告:
<result name="showReportResult" type="redirectAction">
<param name="applicationId">${applicationId}</param>
</result>
例外说明
如果尝试从某个属性中提取属性,则会抛出异常 不具有此类属性的对象
这意味着您需要 Java bean 属性
applicationId
。将 getter 和 setter 放在现场应该可以解决问题。
关于使用 hibernate 插入 id 的更好方法
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name = "id", nullable = false)
public Long getId() {
return id;
}