Websphere 7 JSF
-
06-07-2019 - |
Вопрос
В моем проекте мы разработали проект с использованием 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 что касается проблемы, я бы сообщил об этом.
Другие советы
Я не совсем уверен, в чем именно проблема.У меня есть всего несколько комментариев:
- "... он не может автоматически блокировать int / Integers ..." - Google сообщает мне, что WAS 7 использует JDK 5, который выполняет автобоксинг.Возможно, вам следует проверить, использует ли ваш сервер приложений правильную версию JVM.
- "... неявно преобразовывать строки в 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
. Р>