java - JBoss 6 上的 JSF 1.2 和 EL 表达式未解析

标签 java jsf el jboss6.x

几个小时以来,我的头一直在用这个撞墙,我不知道为什么会这样......

最近我们开始了从 JBoss 4.2.3 迁移到 JBoss 6 Final 的过程。我们正在使用 JSF 1.2。我已经成功地使应用程序适应新的 JBoss(主要是通过从 WEB-INF/lib 中删除一些 JAR 并稍微调整 web.xml)并且应用程序启动得很好。

问题是一些 EL 表达式没有被解析,而其他的则可以。我还在日志中收到 0 个异常或警告。

我有一个名为“mapContext”的 bean,它是在一个 JSF xml 配置文件中定义的。它正在被创建得很好。在我的 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。

网络.xml:

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

如有任何帮助,我们将不胜感激!


更多详情:

好吧,我已经仔细检查了我的代码和配置。我还向我正在使用的自定义变量解析器添加了一些日志记录,以查看 JSF 使用了哪些 bean。结果很奇怪。

首先,我用不同的输出增强了我的 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 的单个日志(根本没有定义这样的 bean!),它们仅在标准标签中使用。

服务器日志中仍然没有错误或警告:(


更多细节:简单测试。

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>

仍然不知道发生了什么,因为没有表明任何问题的日志。

最佳答案

确保以下事项:

  • 您在 /WEB-INF/lib 中没有特定于 servletcontainer 的库,例如 el-*.jar
  • web.xml 声明符合 Servlet 3.0 规范(JBoss 6 支持)。
  • web.xml 不包含 com.sun.faces.expressionFactory 的上下文参数,它指向不同的(显然不存在的)EL 实现。

关于java - JBoss 6 上的 JSF 1.2 和 EL 表达式未解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5926412/

相关文章:

java - 我收到 SelectManyCheckBox 的 "Value is not a valid option"

java - EL 中的 PropertyNotFoundException

java - 两种 EL 语法有什么区别?

java - 在 Spring MVC 应用程序中从异常日志记录更改为异常处理的最简单方法是什么?

java - 强制先执行 "WebFilter"

java - 不完整的光圈

java - 如何添加Oracle ADF的selectOneChoice选项卡索引?

jsf - 重定向到 JSF 中的外部 URL

jsf 目标无法访问,标识符 [bean] 解析为 null

java - iText7,无法设置 formField 值而不出现错误