如何使用<h:commandbutton action =“#{method here}”>?</h:commandbutton>

时间:2014-01-14 19:42:41

标签: java jsp jsf xhtml commandbutton

我愿意打电话给这样的方法:

<h:commandButton value="Register" action="#{account.action}"/>

有一个类跟随:

package com.sources;

public class Account {
    private String password1;
    private String password2;

    public String getPassword1() {
        return password1;
    }

    public void setPassword1(final String password1) {
        this.password1 = password1;
    }

    public String getPassword2() {
        return password2;
    }

    public void setPassword2(final String password2) {
        this.password2 = password2;
    }

    public void action() {
        //if the passwords matchs
            //change page
        //else
            //display an error on the xhtml page
    }
}

在方法中,我想更改页面或显示错误,具体取决于注册的有效性。

更改页面的操作与后续操作相同,但在方法#{account.action}中调用:

<h:commandButton value="Register" action="connect"/>

2 个答案:

答案 0 :(得分:3)

如果您使用的是JSF-2,则可以使用隐式导航:

public String action() {
    if (password1 != null && password2 != null && password1.equals(password2)) {
        return "connect";
    } else {
        FacesMessage msg = new FacesMessage("Passwords do not match");
        FacesContext.getCurrentInstance().addMessage(null, msg);
        return null;
    }
}

如果两个密码相同,这将导航到页面connect.xhtml。如果不是,则将重新呈现注册页面。要显示消息,您需要添加

<h:form>
   <h:messages globalOnly="true" />
   <h:inputText value="#{account.password1}" />
   <h:inputText value="#{account.password2}" />
   <h:commandButton value="Register" action="#{account.action()}" />
</h:form>

到你的页面。

另见:

Creating FacesMessage in action method outside JSF conversion/validation mechanism?

o:validateEqual

答案 1 :(得分:1)

该方法应具有String返回类型,以便为相应的<h:commandButton>提供正确的结果导航。它应该是这样的:

public String action() {
    if ( /* condition here */ )  {
        return "success";
    }
    else   // condition is wrong 
        return "error";
}

这样,您应该添加两个名称为“success”和“error”的页面。