Websphere 7 JSF - PullRequest
       13

Websphere 7 JSF

0 голосов
/ 01 августа 2009

В моем проекте мы разработали проект с использованием JSF 1.2 и JBOSS 5. Как часть нового требования мы должны перенести его в Websphere 7. Но мы столкнулись с проблемой, которая, как я подозреваю, связана с внутренним использованием среды выполнения java. БЫЛО Он не способен автоматически блокировать int / Integers, приводить Strings к 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()" />

Может ли кто-нибудь помочь мне с этим исключением?

Ответы [ 4 ]

1 голос
/ 02 августа 2009

JBoss 5 и WebSphere 7 являются серверами JEE5, поэтому в импланте JSF 1.2 будет использоваться реализация EL, предоставляемая платформой. Правила приведения типов подробно описаны в спецификации JSP 2.1 :

Например, если привести int к строке, поместите int в целое число и примените правило для приведения целого числа к строке. Или, если принудительно привести строку к двойному типу, примените правило приведения строки к двойному типу, а затем «распакуйте» полученный двойной тип, убедившись, что полученный двойной тип фактически не равен нулю.

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

0 голосов
/ 20 апреля 2012

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

0 голосов
/ 01 августа 2009

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

У меня работает автобокс, int в Integer и т. Д.

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

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

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

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

0 голосов
/ 01 августа 2009

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

  1. «... он не может autobox 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'.

Трудно сказать, не публикуя код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...