【问题标题】:jsf outputlabel can't find variablejsf outputlabel找不到变量
【发布时间】:2014-02-15 22:22:55
【问题描述】:

我是 JSF 的新手,在寻找解决方案 1 小时后,我决定在这里寻求解决方案。

所以在我的代码中添加了两件事后,一个是字符串味精;和我的Users.class的公共检查()方法,我确实得到了“/index.xhtml @12,50 value="#{users.msg}":类'users.Users'没有属性'msg ’。”错误。

当我删除线时:

<h:outputLabel id="outlbl" value="#{users.msg}"/><br/>

并从提交按钮将 action 替换为 action="index",它工作正常。

这是我的简单 Users.java 代码:

package users;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

@ManagedBean
@SessionScoped
public class Users {

private String name;
private String msg;

public String getMsg() {
    return msg;
}

public void setMsg(String msg) {
    this.msg = msg;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public void check(){
    if(name.equals("java")) {
        msg = "Valid user!";
    } else {
        msg = "Invalid User!";
    }
}
}

index.xhtml

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:f="http://xmlns.jcp.org/jsf/core">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>

        <h:form>
            <h:outputLabel id="outlbl" value="#{users.msg}"/><br/>
            <h:outputText id="outtxt" value="#{users.name}"/><br/>
            <h:inputText id="intxt" value="#{users.name}"/><br/>
            <h:commandButton id="btn" value="Submit" action="#{users.check()}"/>
        </h:form>

    </h:body>
</html>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Development</param-value>
    </context-param>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>faces/index.xhtml</welcome-file>
    </welcome-file-list>
</web-app>

对不起,如果这是个愚蠢的问题,但我需要先解决它才能继续前进。

【问题讨论】:

    标签: jsf glassfish javabeans


    【解决方案1】:

    web.xml 不完整,需要添加faces servlet。添加这行代码

    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.xhtml</url-pattern>
    </servlet-mapping>
    

    并修改

    <welcome-file>faces/index.xhtml</welcome-file>
    

    <welcome-file>index.xhtml</welcome-file>
    

    编辑1 它现在应该可以工作了。作为建议,@ManagedBean 将被弃用,因此请改用 @Named。进行以下修改:

    @Named
    @SessionScoped
    

    进口:

    import javax.enterprise.context.SessionScoped;
    import javax.inject.Named;
    

    【讨论】:

    • 感谢您的快速回答,但仍然出现同样的错误:'/index.xhtml @12,62 value="#{users.msg}": 类 'users.Users' 没有属性“味精”。”。还有什么想法吗?
    • Alex,从 JSF 2.2 / Servlet 3.0 开始,FacesServlet 自动注册到 *.jsf*.faces/faces/*。另见javadoc。即使那样,如果 FacesServlet 没有正确映射,带有所有 JSF 标记的 Facelets 文件将作为纯文本提供,并且永远不会评估所有 EL 表达式,因此不可能导致这种异常。然而,OP 在评估 EL 期间出现异常,因此这意味着 Facelets 文件被正确解析,这反过来意味着 FacesServlet 被成功调用。
    • 我已经编辑了我的答案。如果仍然无法正常工作,请告诉我您在哪个服务器上运行您的应用程序。
    • Alex,OP 标记为 [glassfish] 并且代码中存在 JSF 2.2 特定的 XML 命名空间表明 Glassfish 版本为 4.0。
    • BalusC 是的,你是对的。现在我看到他们了。他的代码应该可以正常工作。
    猜你喜欢
    • 2018-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-22
    • 2016-04-30
    • 2020-07-06
    相关资源
    最近更新 更多