JSF 1.2 на JBoss 6 и выражение EL не разрешаются - PullRequest
3 голосов
/ 08 мая 2011

Я уже несколько часов бью головой об стену с этим, и я понятия не имею, почему это происходит ...

Недавно мы начали процесс перехода с JBoss 4.2.3 на JBoss 6 Final. Мы используем JSF 1.2. Я успешно адаптировал приложение к новому JBoss (в основном, удалив несколько JAR-файлов из WEB-INF / lib и немного настроив web.xml), и приложение хорошо запускается.

Проблема в том, что некоторые выражения EL не разрешаются, а другие - нет. Я также получаю 0 исключений или предупреждений в журналах.

У меня есть bean-компонент с именем mapContext, который определен в одном из XML-файлов конфигурации JSF. Создается просто отлично. На моей странице JSF у меня есть:

<h:inputHidden id="mapContextId" value="#{mapContext.webContextId}" />   

и на отображаемой странице оно становится:

<input id="mapForm:mapContextId" type="hidden" name="mapForm:mapContextId" value="#{mapContext.webContextId}" />

Как видите, тег JSF отображается просто отлично, но EL не интерпретируется.

В server.log нет журналов, указывающих на какие-либо проблемы.

JSF 1.2, JSTL 1.2, Jboss 6, JDK 6.

web.xml:

    <context-param>
    <param-name>org.jboss.jbossfaces.JSF_CONFIG_NAME</param-name>
    <param-value>Mojarra-1.2</param-value>
</context-param>

Любая помощь будет принята с благодарностью!


Подробнее:

Ну, я дважды проверил мой код и конфигурацию. Кроме того, я добавил некоторые записи в используемый мной инструмент разрешения переменных, чтобы увидеть, какие бины используются JSF. Результаты странные.

Во-первых, я добавил в свою страницу JSF различные выходные данные, и теперь она выглядит следующим образом:

    <h:inputHidden id="mapContextId1" value="#{mapContext}" />
<h:inputHidden id="mapContextId2" value="#{selectionPointSymbol.width}" />    
<h:inputHidden id="mapContextId" value="#{mapContext.webContextId}" />    
<h:inputHidden id="mapContextId3" value="#{selectionPointSymbol4.width}" />

и отображается как:

<input type="hidden" name="mapForm" value="mapForm" />
<input id="mapForm:mapContextId1" type="hidden" name="mapForm:mapContextId1" value="#{mapContext}" />
<input id="mapForm:mapContextId2" type="hidden" name="mapForm:mapContextId2" value="#{selectionPointSymbol.width}" />
<input id="mapForm:mapContextId" type="hidden" name="mapForm:mapContextId" value="#{mapContext.webContextId}" />
<input id="mapForm:mapContextId3" type="hidden" name="mapForm:mapContextId3" value="#{selectionPointSymbol4.width}" />

Я проверил журналы и вижу, что mapContext разрешается просто нестандартными тегами JSF:

12:27:24,911 ERROR [mb.ags.adf.resolvers.AGSUserResolver] AGSUserResolver asked to resolve: mapContext
12:27:24,911 ERROR [mb.ags.adf.resolvers.AGSUserResolver] AGSUserResolver delegated to: com.sun.faces.el.ChainAwareVariableResolver@ab4f3c and resulted with: mb.ags.adf.map.MbWebContext@20
12:27:24,927 ERROR [mb.ags.adf.resolvers.AGSUserResolver] AGSUserResolver asked to resolve: mapContext
12:27:24,927 ERROR [mb.ags.adf.resolvers.AGSUserResolver] AGSUserResolver delegated to: com.sun.faces.el.ChainAwareVariableResolver@ab4f3c and resulted with: mb.ags.adf.map.MbWebContext@20

(их много в журналах).

Но нет единого журнала о: selectionPointSymbol или selectionPointSymbol4 (такой бин не определен вообще!), Которые используются только в стандартных тегах.

Все еще нет ошибок или предупреждений в журнале сервера: (


Подробнее: простой тест.

Страница JSF:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<%@ page buffer="96kb" autoFlush="true" %>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>

<f:view>
<f:loadBundle basename="mb.ags.res.AGSClient" var="msg"/>
<html>
<head>
<title>*********</title>
<link rel="stylesheet" title="base" href="/gis/css/base-style.css" type="text/css" media="screen" />
<style type="text/css">
  body { overflow:auto; }
</style>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
<body>

<div id="loading_table_container" style="position:absolute; text-align:center; left:0; top:0; width:100%; height:100%; z-index:20000; background-color:white;">
    <table id="loading" style="z-index:20001;" height="100%" width="100%">
        <tr>
            <td align="center" valign="middle" style="font-size: 12px">
                <img src="/gis/images/loading_big.gif" alt="Loading..." align="absmiddle"/><br/><br/>
                <h:outputText value="#{msg.welcome_page_map_client_loading}"/>
                <h:outputText id="mapContextId2" value="#{selectionPointSymbol.width}" />
            </td>
        </tr>
    </table>
</div>        

<script>
    var url = "<%= redirectUrl %>";
    var refresh = "<meta http-equiv=\"refresh\" content=\"1000; URL=" + url + "\" />";
    document.writeln(refresh);
</script>
</body>
</html>
</f:view>

отображается как:

<html>
  <head>
    <title>GIS</title>

    <link rel="stylesheet" title="base" href="/gis/css/base-style.css" type="text/css" media="screen" />
    <style type="text/css">
      body { overflow:auto; }
    </style>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <script type="text/javascript" language="javascript" src="/gis/js/prototype.js"></script>  
    <script type="text/javascript" language="javascript" src="/gis/js/scriptaculous/scriptaculous.js?load=effects"></script>
    <script type="text/javascript" language="javascript" src="/gis/js/ext/ext-prototype-adapter.js"></script>
    <script type="text/javascript" language="javascript" src="/gis/js/ext/ext-all.js"></script>

    <script type="text/javascript" language="javascript" src="/gis/js/mb_errors.js"></script>
    <script type="text/javascript" language="Javascript" src="/gis/js/esri_core.js"></script>
    <script type="text/javascript" language="Javascript" src="/gis/js/mapviewer.js"></script>
    <script type="text/javascript" language="javascript" src="/gis/js/ExternalClient.js"></script>
    <script type="text/javascript" language="Javascript" src="/gis/js/index_init.js"></script>
  </head>

  <body>

    <div id="loading_table_container" style="position:absolute; text-align:center; left:0; top:0; width:100%; height:100%; z-index:20000; background-color:white;">
        <table id="loading" style="z-index:20001;" height="100%" width="100%">
            <tr>
                <td align="center" valign="middle" style="font-size: 12px">
                    <img src="/gis/images/loading_big.gif" alt="Loading..." align="absmiddle"/><br/><br/>
                    #{msg.welcome_page_map_client_loading}<span id="mapContextId2">#{selectionPointSymbol.width}</span>


                </td>
            </tr>
        </table>
    </div>        

    <script>
        var url = "/gis/mapviewer.jsf?msid=1000005&uid=1&cid=1&mapContextId=1";
        var refresh = "<meta http-equiv=\"refresh\" content=\"1000; URL=" + url + "\" />";
        document.writeln(refresh);
    </script>
  </body>
</html>

По-прежнему нет понятия, что происходит, поскольку нет журналов, указывающих на какие-либо проблемы.

Ответы [ 2 ]

4 голосов
/ 08 мая 2011

Убедитесь в следующем:

  • У вас нет специфичных для servletcontainer библиотек, таких как el-*.jar в /WEB-INF/lib.
  • web.xml объявлен как Servlet 3.0спецификация (как поддерживает JBoss 6).
  • web.xml не содержит контекстного параметра com.sun.faces.expressionFactory, который указывает на другую (и, очевидно, несуществующую) реализацию EL.
0 голосов
/ 08 мая 2011

JSF молча возвращает пустую строку, если mapContext не определено в вашем фрагменте EL.

Вы абсолютно уверены, что mapContext правильно настроен? Это очень легко пропустить в процессе миграции.

...