Вопрос

В моем проекте мы разработали проект с использованием JSF 1.2 и JBOSS 5.В рамках нового требования мы должны перенести его на Websphere 7.Но мы столкнулись с проблемой, которая, как я подозреваю, связана с средой выполнения java, внутренне используемой WAS.Он не способен автоматически блокировать int / Integers , неявно преобразовывать строки в long.После предоставления необходимых проверок для этого, наконец, я застрял на следующем исключении проверки:

/Star/employeeFormP1.jsp(226,4) '#{StarEmployeeApplicationFormBean.medicalHMO}' Не удается установить свойство 'medicalHMO' для класса 'com.idea.app.bean.StarEmployeeApplicationFormBean' принимает значение '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 будет просто использоваться реализация EL, предоставляемая платформой. Правила приведения типов подробно описаны в спецификации JSP 2.1 :

  

Например, если привести int к строке String, " box " int в Integer и применить правило для приведения Integer к String. Или, если принудительно привести строку к двойному типу, примените правило для приведения строки к двойному типу, а затем "unbox" получившийся Double, убедившись, что результирующий Double на самом деле не равен нулю.

На основании правил, описанных в спецификации, это звучит как ошибка в реализации WebSphere. Если вы не можете найти существующий APAR / Fix Pack что касается проблемы, я бы сообщил об этом.

Другие советы

Я не совсем уверен, в чем именно проблема.У меня есть всего несколько комментариев:

  1. "... он не может автоматически блокировать int / Integers ..." - Google сообщает мне, что WAS 7 использует JDK 5, который выполняет автобоксинг.Возможно, вам следует проверить, использует ли ваш сервер приложений правильную версию JVM.
  2. "... неявно преобразовывать строки в long ..." - Я не верю, что какая-либо JVM делает это.

После предоставления необходимых проверок для этого, наконец, я застрял на следующем исключении проверки:

/Star/employeeFormP1.jsp(226,4) '#{StarEmployeeApplicationFormBean.medicalHMO}' Не удается установить для свойства 'medicalHMO' класс 'com.idea.app.bean.StarEmployeeApplicationFormBean' значение 'true'.

Это трудно сказать, не опубликовав какой-либо код.

WAS 7.0 фактически использует JDK 1.6, WAS 6.1 использует JDK 1.5.

Автобокс работает для меня, от Integer и т. д.

Я согласен с комментарием о том, что преобразования типа String в примитивные не являются частью "autoboxing".

Сеттер для medicalHMO - ключ к вашей проблеме, какого типа он ожидает?

Если, например, у вас есть setMedicalHMO (строка newValue) {...}

может быть интересно добавить еще один метод setBooleanMedicalHMO (boolean newValue) {...}

Возможно, вы используете 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 .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top