0

我从我的案例开始:

JSF 2.1

雄猫 7.0.27

Netbeans 作为 IDE

JSF 和 PRIMEFace(但可选)

级别 JSF 初学者

水平JAVA好不神


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

一点代码:

/*
 * 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,所以切换很简单。

我想采用一种“模式”,这样我就可以重复使用它,例如当我进行搜索时没有数据存在,或者当我调用“erease DB”并且应用程序说正在进行中然后说好的所有银行账户都是esreased(只是一个例子!!但很有趣,因为有 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 生成的多语言......嗯,这不是我所缺少的东西。

4

1 回答 1

0

这个问题有很多噪音。我了解您的问题最终归结为:

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

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

当您谈论本地化时,您肯定应该已经有了类似的东西

<resource-bundle>
    <base-name>com.example.i18n.text</base-name>
    <var>text</var>
</resource-bundle>

在你的faces-config.xml. 您也可以在 bean 中获取它,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);
于 2012-11-23T12:35:29.670 回答