【问题标题】:Submit value from form to method without variable in the BackingBean在BackingBean中将值从表单提交到没有变量的方法
【发布时间】:2014-03-20 13:56:26
【问题描述】:

我有一个简单的表单,用户输入他的用户名和密码,在 bean 中检查值是否正确。

.xhtml

<p:outputLabel value="Username:" />
<p:inputText value="#{fooBean.username}" />

<p:outputLabel value="Passwort:" />
<p:password value="#{fooBean.password}" />

<p:commandButton value="Login" action="#{fooBean.check()}" />

fooBean

public void check() {
    if(username == "name" && password == "pass") {
        // do stuff
    }
}

现在我的问题是,是否有办法将 inputTexts 的值提交给函数 check(String username, String password),而无需在 bean 中声明字段。

【问题讨论】:

    标签: java jsf jsf-2 primefaces


    【解决方案1】:

    简单地说:

    <p:outputLabel value="Passwort:" />
    <p:password value="#{password}" />
    
    <p:commandButton value="Login" action="#{fooBean.check(username, password)}" />
    

    会起作用,但也许扩大范围会更好:

    <p:outputLabel value="Passwort:" />
    <p:password value="#{viewScope.password}" />
    
    <p:commandButton value="Login" 
        action="#{fooBean.check(viewScope.username, viewScope.password)}" />
    

    【讨论】:

    • 这种方式和通常的方式相比有什么缺点吗?
    • 主要缺点是您需要一个 bean/事件侦听器来进行变量初始化,我认为这种技术的大量使用会导致难以维护的代码:使用模板和包含很容易放入相同作用域 两个具有相同名称的不同对象。发现这种错误可能会很痛苦。
    • 谢谢@MicheleMariotti。
    • @MicheleMariotti,如果您能给我提供进一步的建议,我如何在提交表单后重置这些值?此表单位于对话框中,提交后仅重置密码 inputText。
    • @Rosty 重置未处理的输入是 JSF 设计泄漏,IMO。看看OmniFaces ResetInputAjaxActionListener
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多