输入值未在托管 bean 中更新

Input values are not updated in managed bean

我的 HTML 页面的字段值没有发送到我的托管 bean。通过调用操作,值为 null。我的 html 代码是:

<form jsf:id="form">
    <fieldset>
        <label> <span
                class="block input-icon input-icon-right"> <input
                    type="text" class="span12" placeholder="Usuário"
                    jsf:id="usr" jsf:value="#{loginBean.user}" />
                    <i class="icon-user"></i>
            </span>
        </label> <label> <span
                class="block input-icon input-icon-right"> <input
                    type="password" class="span12" placeholder="Senha"
                    jsf:id="pwd" jsf:value="#{loginBean.password}" />
                    <i class="icon-lock"></i>
            </span>
        </label>

        <div class="space"></div>

        <div class="clearfix">
            <button jsf:action="#{loginBean.doLogin()}" jsf:id="btn"
                    class="width-35 pull-right btn btn-small btn-primary">
                <i class="icon-key"></i> Login
            </button>
        </div>

        <div class="space-4"></div>
    </fieldset>
</form>

我被放在 syout 我的 LoginBean.doAction 方法上,它为 userpassword 属性打印 null

我是不是做错了什么?

根据评论,您基于旧 java.sun.com 主机在 URI http://java.sun.com/jsf 上声明了 XML 命名空间 xmlns:jsf

这在旧的 Mojarra 版本中有一个错误。 <f:viewAction> 和“HTML5 friendly markup”等新的 JSF 2.2 特定功能最初在 URI 中具有旧 java.sun.com 主机的 XML 名称空间上不可用,但仅在 xmlns.jcp.org 主机。这已在 Mojarra 2.2.1-2.2.2 中修复。

当您使用 Java EE 7 时,您真的应该放弃 XML 名称空间 URI 中的 java.sun.com 主机,而改用 xmlns.jcp.org

<html ... xmlns:jsf="http://xmlns.jcp.org/jsf">

也就是说,出现此错误也表明您使用的是相当旧的 Mojarra 版本。升级它是明智的。它目前已经是 2.2.9(这反过来有一个尴尬的错误,即行号不包含在 class 文件中,所以你无法在 IDE 的调试器中单步执行源代码,你如果这是强制性的,最好选择 2.2.8;这将在 2.1.10 中修复)。