0

在我使用 JSF 之前,以下代码在 JSP 文件中运行:

<c:if test="${not (empty request.error)}">
    Error: ${request.getAttribute("error")}
</c:if>

现在,当我使用 JSF 时,我收到了这个错误:

/login.xhtml @24,51 test="${not (empty request.error)}" /login.xhtml @24,51 test="${not (empty request.error)}": 属性'error' not在 org.apache.catalina.connector.RequestFacade 类型上找到

这里有什么问题/解决方案?编辑器没有在任何内容下划线。

整个 login.xhtml:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns:ui="http://java.sun.com/jsf/facelets"
                template="./template.xhtml"
                xmlns:c="http://java.sun.com/jsp/jstl/core">

    <ui:define name="userBar">
        <form method="POST" action="Login">
            <table>
                <tr>
                    <td>Login</td>
                    <td><input type="text" name="login" /></td>
                </tr>
                <tr>
                    <td>Password</td>
                    <td><input type="password" name="password" /></td>
                </tr>
                <tr>
                    <td colspan="2"><input type="submit" value="Login" /></td>
                </tr>
            </table>            
        </form>

        <c:if test="${not (empty request.error)}">
            Error: ${request.getAttribute("error")}
        </c:if>
    </ui:define>

    <ui:define name="content">
        content
    </ui:define>
</ui:composition>
4

3 回答 3

3

由于 JSF2/Facelets,#{request}是一个隐含的 EL 变量,引用当前涉及的HttpServletRequest对象。另请参阅JSF 2.0 中的通信 - 隐式 EL 对象

您需要重命名您的托管 bean(或在 EL 范围内以完全相同的属性名称出现的任何名称),或通过 EL 范围映射显式引用它。假设它是请求范围的,您应该#{requestScope.request}改用它。

<c:if test="#{not empty requestScope.request.error}">
于 2012-07-12T02:25:06.930 回答
0

错误很明显。
您的名为 request 的 bean 类型为“org.apache.catalina.connector.RequestFacade”,没有名为“error”的属性。或者如果它存在,则可能没有 getter/setter。

如果您的意图是从 servlet 请求中获取值,您可以这样做:

<h:outputText value="#{param['error']}" />

此处的更多信息: 从 JSF 页面获取请求和会话参数和属性

但是你为什么需要它?如果您想处理 JSF 中的错误,您可以捕获异常并根据需要显示它:

h:message tag
FacesMessage class

一些网站: http:
//www.jsftoolbox.com/documentation/help/12-TagReference/html/h_message.html

http://docs.oracle.com/cd/E17824_01/dsc_docs/docs/jscreator/apis/jsf/javax/faces/application/FacesMessage.html

于 2012-07-10T20:52:09.093 回答
0

这不是一个“未设置的值”,它是一个不存在的属性。HttpRequest 没有“错误”属性。request.getAttribute("error")语法是您应该使用的。

于 2012-07-11T01:46:34.440 回答