Параметры привязки JSF EL работают на Glassfish 3, но не на JBoss 6

#java #jsf-2 #jboss6.x

#java #jsf-2 #jboss6.x

Вопрос:

Ниже приведено исключение:

10:23:50,325 СЕРЬЕЗНЫЙ [javax.enterprise.resource.webcontainer.jsf.context] (http-/ 127.0.0.1:18080-1) javax.faces.component.Исключение UpdateModelException: javax.el.PropertyNotFoundException: /auth/common/textSyncLockRow.xhtml @29,45 значение=»#{customerMaintenanceView.getSyncLockInfo(имя таблицы, имя поля).synced}»: класс ‘com.jeldwen.cdm.view.CustomerMaintenanceView $Proxy $_$$_WeldClientProxy’ не имеет свойства ‘getSyncLockInfo’.

в javax.faces.component.UIInput.UpdateModel(UIInput.java:857)
в javax.faces.component.UIInput.processUpdates(UIInput.java:739)
в javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1244)
в javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1244)
в javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1244)
в javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1244)
в javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1244)
в javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1244)
в javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1244)
в org.primefaces.component.panel.Panel.processUpdates(Panel.java:288)
в javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1244)
в javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1244)
в org.primefaces.util.ComponentUtils.processUpdatesOfFacetsAndChilds(ComponentUtils.java:444) в org.primefaces.component.tabview.TabView.processUpdates(TabView.java: 377)
в javax.faces.component.UIForm.processUpdates(UIForm.java:281)
в javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1244)
в javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1244)
в org.primefaces.component.макет.Layout.processUpdates(Layout.java:240)
в javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1244)
в javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1244)
в javax.faces.component.UIViewRoot.processUpdates(UIViewRoot.java:1223)
в com.sun.faces.lifecycle .UpdateModelValuesPhase.execute(UpdateModelValuesPhase.java:78)
в com.sun.faces.lifecycle.Фаза.doPhase(Phase.java: 101)
в com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
в org.apache.deltaspike.jsf.impl.listener.request.DeltaSpikeLifecycleWrapper.execute(DeltaSpikeLifecycleWrapper.java:75)
в javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:295)
в org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
в org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
в org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:149)
в org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:499)
в org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:169)
в org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:145)
в org.apache.catalina.valves.Ошибка reportvalve.invoke(ошибка reportvalve.java:97)
в org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:102)
в org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java: 336)
в org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)
в org.apache.coyote.http11.Http11Protocol $ Http11ConnectionHandler.process(Http11Protocol.java: 653)
в org.apache.tomcat.util.net .JIoEndpoint$Worker.run(JIoEndpoint.java:926)
на java.lang.Thread.run(Thread.java:745)

Вызвано: javax.el.PropertyNotFoundException: /auth/common/textSyncLockRow.xhtml @29,45 значение=»#{customerMaintenanceView.getSyncLockInfo(имя_таблицы, имя_поля).синхронизировано}»: класс ‘com.jeldwen.cdm.view.CustomerMaintenanceView $Proxy $_$$_WeldClientProxy’ не имеет свойства ‘getSyncLockInfo’.

в com.sun.faces.facelets.el.TagValueExpression.setValue(TagValueExpression.java:133)
в javax.faces.component.UIInput.updateModel(UIInput.java:822)

Код из xhtml:

 <p:selectBooleanCheckbox 
    disabled="#{!customerMaintenanceView.isLockEnabled('corpcust', 'name')}" 
    value="#{customerMaintenanceView.getSyncLockInfo('corpcust', 'name').locked}" 
    onchange="flagDirty()">
</p:selectBooleanCheckbox>
  

Код из компонента ViewScoped:

 public CdmSyncInfo getSyncLockInfo(String tableName, String fieldName) {
    return controller.getSyncInfo(tableName, fieldName);
}
  

Код из контроллера SessionScoped:

 public CdmSyncInfo getSyncInfo(String tableName, String fieldName) {
CdmSyncInfo value = new CdmSyncInfo();
    for (CdmSyncInfo info : tdrWorking.getCustomerSyncInfos()) {
        if (StringUtils.equalsIgnoreCase(tableName, info.getTableName()) amp;amp; StringUtils.equalsIgnoreCase(fieldName, info.getFieldName())) {
            value = info;
            break;
        }
    }
    return value;
}
  

Вопрос: Это отлично работает на Glassfish 3, что мне нужно сделать, чтобы устранить исключение, возникающее в JBoss EAP 6.2?

Комментарии:

1. Убедитесь, что версия EL, поставляемая с версией JSF, распространяемой вместе с вашим JBoss, равна El 2.2 (хотя, похоже, у анализатора EL не было проблем с disabled выражением).

2. Спасибо, колоссус 20, я подтвердил, что это EL 2.2.

3. Исправлено путем создания модели с 160 плюс полями синхронизации и блокировки. Итак, эта строка: value=»#{customerMaintenanceView.getSyncLockInfo(‘corpcust’, ‘name’).locked}» стала: value=»#{customerMaintenanceView.corporateSyncLock.legalNameLocked}»