jsf outputlabel找不到变量

时间:2014-02-15 22:22:56

标签: jsf glassfish javabeans

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

所以在我的代码中添加两个东西之后,一个是String msg;和athor public check()方法到我的Users.class,我确实得到了“/index.xhtml @ 12,50 value =”#{users.msg}“:类'users.Users'没有属性'msg ”“。错误。

当我删除行时:

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

并从提交按钮替换action to 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>

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

1 个答案:

答案 0 :(得分:0)

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>

<强> EDIT1 它现在应该工作。作为建议,@ ManagedBean将被弃用,因此请改用@Named。进行以下修改:

@Named
@SessionScoped

使用导入:

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