有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JavaWebSphere7JSF

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

/Star/employeeFormP1。jsp(226,4)#{StarEmployeeApplicationFormBean.medicalHMO}无法在类“com”上设置属性“medicalHMO”。主意应用程序。豆StarEmployeeApplicationFormBean'将值设置为true

以下是相关代码:

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

有人能帮我解决这个验证例外吗


共 (4) 个答案

  1. # 1 楼答案

    可能是您正在使用IBM JVM,我前不久注意到一个错误,如果您使用==将int与long进行比较,并使用相同的值,它会自动装箱并返回false

    例如,使用此方法:

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

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

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

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

    现在,amIEqual(3,3)突然变成了true

  2. # 2 楼答案

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

    For example, if coercing an int to a String, "box" the int into an Integer and apply the rule for coercing an Integer to a String. Or if coercing a String to a double, apply the rule for coercing a String to a Double, then "unbox" the resulting Double, making sure the resulting Double isn’t actually null.

    根据规范中详细的规则,这听起来像是WebSphere实现中的一个bug。如果你找不到解决这个问题的现有APAR/Fix Pack,我会报告

  3. # 3 楼答案

    WAS7.0实际使用JDK1.6,WAS6.1使用JDK1.5

    自动装箱适用于我,从整数到整数等等

    我同意字符串到原语类型的转换不是“自动装箱”的一部分的说法

    medicalHMO的setter是解决问题的关键,它期望什么类型

    例如,如果您有setMedicalHMO(字符串newValue){…}

    添加另一个setter setBooleanMedicalHMO(布尔newValue){…}

  4. # 4 楼答案

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

    1. “…它无法自动装箱整数…”谷歌告诉我WAS 7使用JDK 5,which does autoboxing。也许你应该检查一下,确保你的应用服务器使用的是正确版本的JVM
    2. “…将字符串隐式转换为long…”我不相信任何JVM会这么做

    After providing the necessary checks for it finally I am stuck at the following validation exception:

    /Star/employeeFormP1.jsp(226,4) '#{StarEmployeeApplicationFormBean.medicalHMO}' Can't set property 'medicalHMO' on class 'com.idea.app.bean.StarEmployeeApplicationFormBean' to value 'true'.

    如果不发布一些代码,很难判断