繁体   English   中英

Websphere 7 JSF

[英]Websphere 7 JSF

在我的项目中,我们使用JSF 1.2和JBOSS 5开发了一个项目。作为新要求的一部分,我们必须将其迁移到Websphere7。但是,我们面临着一个我怀疑与WAS内部使用的Java运行时有关的问题。 它无法自动将int / Integers装箱,将字符串隐式转换为long。 在为其提供了必要的检查之后,我最终陷入了以下验证异常:

/Star/employeeFormP1.jsp(226,4)'#{StarEmployeeApplicationFormBean.medicalHMO}'无法将类'com.idea.app.bean.StarEmployeeApplicationFormBean'的属性'medicalHMO'设置为'true'。

以下相关代码:

   <h:selectBooleanCheckbox id="checkbox1" 
      value="#{StarEmployeeApplicationFormBean.medicalHMO}"
      title="click it to select or deselect"
      immediate="true"
      valueChangeListener="#{StarEmployeeApplicationFormBean.listHMOMedProducts}"
      onchange="return submit()" />

有人可以帮我解决这个验证异常吗?

JBoss 5和WebSphere 7是JEE5服务器,因此JSF 1.2 impl将仅使用平台提供的EL实现。 JSP 2.1规范中详细说明了类型强制的规则:

例如,如果将一个int强制转换为一个字符串,则将其“装箱”为一个Integer并应用将一个Integer强制转换为一个字符串的规则。 或者,如果将字符串强制为双精度型,请应用将字符串强制为双精度型的规则,然后对结果双精度型“取消装箱”,确保结果双精度型实际上不为null。

根据规范中详述的规则,这听起来像是WebSphere实现中的错误。 如果找不到解决该问题的现有APAR /修复包 ,请报告。

可能是您使用的是IBM JVM,我发现前不久有一个错误,如果您使用==比较带有long且具有相同值的int,它将自动装箱并返回false

例如,使用此方法:

public boolean amIEqual(int myInt, long myLong){
     return myInt == myLong;
}

在我使用的IBM JVM上, amIEqual(3,3)false

为了解决这个问题,我显式使用了对象类型:

public boolean amIEqual(Integer myInt, Long myLong){
     return myInt.equals(myLong);
}

现在, amIEqual(3,3)突然变为true

我不确定到底是什么问题。 我只有几点评论:

  1. “ ...无法对int / Integers进行自动装箱 ...”-Google告诉我WAS 7使用了JDK 5, 它可以进行自动装箱 也许您应该检查以确保您的应用服务器使用的是正确版本的JVM。
  2. “ ...将字符串隐式地转换为long ...”-我不相信任何JVM都会这样做。

在为其提供了必要的检查之后,我最终陷入了以下验证异常:

/Star/employeeFormP1.jsp(226,4)'#{StarEmployeeApplicationFormBean.medicalHMO}'无法将类'com.idea.app.bean.StarEmployeeApplicationFormBean'的属性'medicalHMO'设置为'true'。

不发布代码就很难分辨。

WAS 7.0实际上使用JDK 1.6,WAS 6.1使用JDK 1.5。

自动装箱对我有效,从int到Integer等。

我同意这样的说法,即字符串到原始类型的转换不属于“自动装箱”。

medicalHMO的设置器是解决您问题的关键,它希望使用哪种类型?

例如,如果您有setMedicalHMO(string newValue){...}

添加另一个setter setBooleanMedicalHMO(boolean newValue){...}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM