【问题标题】:h:inputText - does not put input in beans?h:inputText - 不在 bean 中输入?
【发布时间】:2012-05-15 11:57:37
【问题描述】:

我正在编写一个 jsf 应用程序。这是我的代码:

register.xhtml:

        <fieldset>
            <div>
              <h:outputLabel class="Float" for="username" value="Username"/>
              <h:inputText id="username" rendered="true" value="#{Register.username}" label="Username">
              <f:validateLength minimum="3" maximum="8"/>
              </h:inputText>
        </div>
        <div>
              <h:outputLabel class="Float" for="password" value="Passwort"/>
              <h:inputText id="password" rendered="true" value="#{Register.password}" label="Passwort">
                <f:validateLength minimum="3" maximum="8"/>
              </h:inputText>
            </div>
       </fieldset>

<div id="buttons">
  <h:form id="buttons">
    <h:commandButton id="enter" accesskey="r" value="Registrieren" action="#{Register.registerPlayer()}" immediate="true"/>
    <h:outputText value="#{msg.wrongpwd}" rendered="#{loginCtrl.loginfailed}" style="color: red"/>
    <h:messages style="color: red"/>
  </h:form>
</div>
</form>
...

Register.java:

public String getUsername() {
    return username;
}

public String getPassword() {
    return pwd;
}

public void registerPlayer() {
    this.nameList.add(getUsername());
    this.passwordList.add(pwd);
    System.out.println(getUsername() + " : " + pwd  + " :successfully registered!!!");
}

我的问题是当我按下按钮时得到输出:

null : null : 成功注册!!!

这是为什么?

更新 1------------------------------

好的,我使用了 h:form 标签,但仍然返回 null:

这是我认为 jsf 工作原理的循环: 首先:写入 inputText -> bean 读取它 -> 您可以操作该值(例如,将其写入列表)...

那个循环有什么问题?或者我的代码...

更新 2------------------------------ 我的设置方法:

public void setUsername(String username) {
    this.username = username;
}
public void setPassword(String pwd) {
    this.pwd = pwd;
}

它们遥不可及,但为什么呢?

【问题讨论】:

  • 你的 bean 字段是否有设置器,例如setUsername(...)?此外,您通常需要使用小写首字母调用 bean(除非您没有在注释中明确命名为 Register)。
  • 是的,我有二传手,但我没有在我的 *.xhtml 文件中调用它们...我应该调用它们吗?如果在哪里????;????
  • 不,它们应该由 JSF 自动调用。您可以在 setter 方法中设置断点并检查是否到达。
  • 他们没有到达,但他们仍然存在?为什么不到达框架setter?
  • 你确定你对按钮和 inputText 元素使用了相同的表单吗?

标签: java jsf jsf-2


【解决方案1】:

您的h:inputText 字段必须在表单内。请尝试以下操作:

<h:form>
    <fieldset>
        <div>
            <h:outputLabel class="Float" for="username" value="Username"/>
            <h:inputText id="username" rendered="true" value="#{Register.username}" label="Username">
                <f:validateLength minimum="3" maximum="8"/>
            </h:inputText>
        </div>
        <div>
            <h:outputLabel class="Float" for="password" value="Passwort"/>
            <h:inputText id="password" rendered="true" value="#{Register.password}" label="Passwort">
                <f:validateLength minimum="3" maximum="8"/>
            </h:inputText>
        </div>
    </fieldset>

    <div id="buttons">
        <h:commandButton id="enter" accesskey="r" value="Registrieren" action="#{Register.registerPlayer()}" immediate="true"/>
        <h:outputText value="#{msg.wrongpwd}" rendered="#{loginCtrl.loginfailed}" style="color: red"/>
        <h:messages style="color: red"/>
    </div>
</h:form>

现在表单包括inputText 字段和commandButtons

【讨论】:

    猜你喜欢
    • 2011-06-05
    • 2013-03-25
    • 2012-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-12
    • 1970-01-01
    • 2011-07-08
    相关资源
    最近更新 更多