有关SUBMIT操作的JSF消息

时间:2012-11-23 09:43:44

标签: jsf-2

我从我的案例开始:

JSF 2.1

Tomcat 7.0.27

Netbeans as IDE

JSF和PRIMEFace(但可选)

等级JSF初学者

等级JAVA好而不是上帝


我已经做了一个简单的JSF站点来学习如何使用JSF。我的问题是基于此步骤的Login示例,问题与显然是修指甲的登录无关。

一些代码:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

/**
 *
 * @author 
 */
@ManagedBean
@SessionScoped
//@RequestScoped
public class User implements Serializable {
private static final long serialVersionUID = 1L;
private final String userName = "User";
private final String userPassword = "12345";
private String name;
private String password;
private boolean isLogged=false;


public String getName() {
    return name;
}


public void setName( String name ) {
    this.name = name;
}


public String getPassword() {
    return password;
}


public void setPassword( String password ) {
    this.password = password;
}


public String login() {
    if( !(userName==null || password==null)
        &&
        (userName.equals( name ) && userPassword.equals( password ))) {

        isLogged=false;
        return "main";
    } else {
        isLogged=true;
        return "index";
    }



}

public boolean getIsLogged(){
    return isLogged;
}
}

页面索引

   <?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>TSAM 7.5 Login</title>
        </h:head>
        <h:body>
            Login system
            <br />
            <!--<h:link outcome="welcomePrimefaces" value="Primefaces welcome page" />-->
            <h:form>
                User : <h:inputText value="#{user.name}" />
                Password : <h:inputSecret value="#{user.password}" />
                <h:commandButton action="#{user.login()}" value="Submit" />
                <h:commandButton value="reset" type="reset" />
                <h:commandButton value="otherpage" action="otherpage"></h:commandButton>

            </h:form>
        </h:body>
    </html>

主页

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:p="http://primefaces.org/ui">

    <f:event type="preRenderView" listener="#{user.isLogged}"/> 
    <f:view contentType="text/html">
        <h:head>
            <f:facet name="first">
                <meta content='text/html; charset=UTF-8' http-equiv="Content-Type"/>
                <title>PrimeFaces</title>
            </f:facet>
        </h:head>

        <h:body>


            <p:layout fullPage="true">

                <p:layoutUnit position="north" size="100" resizable="true" closable="true" collapsible="true">
                    Header
                </p:layoutUnit>

                <p:layoutUnit position="south" size="100" closable="true" collapsible="true">
                    Footer
                </p:layoutUnit>

                <p:layoutUnit position="west" size="175" header="Left" collapsible="true">
                    <p:menu>
                        <p:submenu label="Resources">
                            <p:menuitem value="Demo" url="http://www.primefaces.org/showcase-labs/ui/home.jsf" />
                            <p:menuitem value="Documentation" url="http://www.primefaces.org/documentation.html" />
                            <p:menuitem value="Forum" url="http://forum.primefaces.org/" />
                            <p:menuitem value="Themes" url="http://www.primefaces.org/themes.html" />

                        </p:submenu>

                    </p:menu>
                </p:layoutUnit>

                <p:layoutUnit position="center">
                    Welcome to PrimeFaces
                </p:layoutUnit>

            </p:layout>

        </h:body>

    </f:view>
</html>

首先

我使用action =“#{user.login()}”来使导航操作正确或有更好的模式?

但真正的问题是:如何重定向如何显示消息?

我想在PrimeFace http://www.primefaces.org/showcase/ui/dialogLogin.jsf中展示一条我知道该示例的消息。但它不会重定向或显示任何内容。 但如果我只使用没有PrimeFace的“普通”JSW,我喜欢放一个 因为它与PrimeFaces类似,所以切换很简单。

我想采用“模式”,所以我可以重复使用它,例如当我做一个serch时,没有数据存在,或者当我称之为“erease DB”并且应用程序说正在进行的工作然后说OK OK all银行帐户已被废除(只有一个例子!!但有趣的是因为有2条消息)。

由于


我试试

public String login() {
        if (!(userName == null || password == null)
            && (userName.equals( name ) && userPassword.equals( password ))) {

            isLogged = true;
            return "main";
        } else {
            isLogged = false;
            FacesMessage facesMsg;
            facesMsg = new FacesMessage( FacesMessage.SEVERITY_ERROR, "No login", "No login because username or passsword are incorrect etc" );
            FacesContext fc = FacesContext.getCurrentInstance();
            fc.addMessage( "loginError", facesMsg );
            return "index";
        }



    }

并编辑了页面

<h:body>
        Login system
        <br />
        <!--<h:link outcome="welcomePrimefaces" value="Primefaces welcome page" />-->
        <h:form>
            User : <h:inputText value="#{user.name}" />
            Password : <h:inputSecret value="#{user.password}" />
            <h:commandButton action="#{user.login()}" value="Submit" />
            <h:commandButton value="reset" type="reset" />
            <h:commandButton value="Cambio Password" action="changePassword"></h:commandButton>


        </h:form>

        <h:message for="" style="color:red;margin:8px;"/>
    </h:body>

它可以工作,但它不好,因为在bean中放入一个字符串是不可行的。而且我需要这个字符串必须由bean生成的多语言.... mmm这不是我想要的东西。

1 个答案:

答案 0 :(得分:0)

问题中有很多噪音。我知道你的问题最终归结为:

  

如何在bean操作方法中创建本地化面部消息?

在这种情况下,只需自己从当前资源包中获取消息。

当你谈论本地化时,你肯定已经有了像

这样的东西
<resource-bundle>
    <base-name>com.example.i18n.text</base-name>
    <var>text</var>
</resource-bundle>

faces-config.xml中。您可以在ResourceBundle的帮助下获取它,而JSF本身实际上也在其中使用了

Locale locale = FacesContext.getCurrentInstance().getViewRoot().getLocale();
ResourceBundle text = ResourceBundle.getBundle("com.example.i18n.text", locale);

这样您就可以将消息撰写为

String summary = text.getString("messages.no_login_summary");
String detail = text.getString("messages.no_login_detail");
new FacesMessage(FacesMessage.SEVERITY_ERROR, summary, detail);