Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSF不会用提交的输入值填充@Named@RequestScoped bean_Jsf_Jsf 2_Cdi_Managed Bean - Fatal编程技术网

JSF不会用提交的输入值填充@Named@RequestScoped bean

JSF不会用提交的输入值填充@Named@RequestScoped bean,jsf,jsf-2,cdi,managed-bean,Jsf,Jsf 2,Cdi,Managed Bean,这是我在这个美丽的网站上的第一个问题。我在谷歌上搜索了很多,但没有找到任何解决办法 我是JSF新手,我正在学习Kent Ka lok Tong的“JSF 2 API和JBoss Seam” 现在我有一个简单的登录实现问题。我有一个登录页面: <?xml version='1.0' encoding='UTF-8' ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.or

这是我在这个美丽的网站上的第一个问题。我在谷歌上搜索了很多,但没有找到任何解决办法

我是JSF新手,我正在学习Kent Ka lok Tong的“JSF 2 API和JBoss Seam”

现在我有一个简单的登录实现问题。我有一个登录页面:

<?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://java.sun.com/jsf/html">
    <h:head>
        <title>Login</title>
    </h:head>
    <h:body>
        <h1>Login</h1>
        <h:messages for="loginForm" />
        <h:form id="loginForm">
            <h:inputText id="username" value="#{loginRequest.username}" required="true" />
            <h:inputSecret id="password" value="#{loginRequest.password}" required="true" />
            <h:commandButton value="Login" action="#{loginRequest.doLogin}"></h:commandButton>
        </h:form>

    </h:body>
</html>
当我运行应用程序时,我的用户名和密码属性结果为空。我调试了我的应用程序,发现setters方法被正确调用。问题是,当调用setUsername时,LoginRequest有一个实例,当调用setPassword函数时,实例就不同了!应用程序似乎可以执行以下操作:

obj1 = new LoginRequest() //username and password = null;
obj1.username = username;

obj1 = new LoginRequest() //username and password = null;
obj1.password = password;

obj1 = new LoginRequest() //username and password = null;
obj1.doLogin();
我哪里有麻烦?错在哪里

非常感谢

致意

马可从你的豆子里:

import javax.faces.bean.RequestScoped;
import javax.inject.Named;

@Named("loginRequest")
@RequestScoped
public class LoginRequest {
您正在混合CDI和JSF注释。你可以也不应该那样做。用这个或那个。我不知道这本书告诉了你什么,但很可能你在导入
@RequestScoped
注释时选择了错误的自动完成建议。请注意IDE建议的内容是否与书中的内容相符

因此,您应该只使用CDI注释

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

@Named("loginRequest")
@RequestScoped
public class LoginRequest {
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

@ManagedBean(name="loginRequest")
@RequestScoped
public class LoginRequest {
或仅JSF注释

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

@Named("loginRequest")
@RequestScoped
public class LoginRequest {
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

@ManagedBean(name="loginRequest")
@RequestScoped
public class LoginRequest {
否则,作用域默认为
“none”
,引用bean的每个EL表达式都将创建一个全新的、独立的bean实例。如果有三个EL表达式引用
#{loginRequest}
,那么您将得到三个实例。一个用于设置名称,一个用于设置密码,一个用于调用操作



与具体问题无关,托管bean名称已经默认为第一个字符小写的类名称。您可以完全省略
(“loginRequest”)
部分。

您所说的“运行应用程序”是什么意思?您打开登录页面,在文本框中输入您的姓名和密码,然后单击登录按钮?是的,我通过在glassfish上部署应用程序来运行应用程序,并在浏览器中打开登录页面,输入用户和密码,然后按按钮。我相信名称空间是相同的。“当前”和“ManagedProperty”注释之间存在相同的差异!对吗?然后不要混合使用CDI和JSF注释。多谢各位!