viewParam返回null值

时间:2014-01-22 01:24:48

标签: java jsf-2 primefaces glassfish-4 java-ee-7

我正在尝试在我的应用程序中获取当前用户的id,当他创建一个文档以使用用户的id注册该文档时。但是当使用<f:viewParam>时,doument bean中的用户id总是为null。

这是我的代码:

         <h:form id="form">
            <br></br>

            <div class="centre">
                <p:graphicImage url="images/usericon.png" id="usericon"
                    alt="utilisateur IsetN" style="width:100px;height:100px"></p:graphicImage>
            </div>
            <br></br>

            <div class="centre">
                <p:inputText placeholder="E-mail" required="true" id="email"
                    value="#{userBean.email}" requiredMessage="E-mail obligatoire">
                     <f:validateRegex pattern="[\w\.-]*[a-zA-Z0-9_]@[\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]" />
                    </p:inputText>
                    <p:message for="email"></p:message>
            </div>
            <br></br>
            <div class="centre">
                <p:password id="motdepasse" value="#{userBean.password}" required="true"
                    placeholder="Mot de passe" requiredMessage="Mot de passe Obligatoire">

                    </p:password>
                    <p:message for="motdepasse"></p:message>
            </div>
            <br></br>
            <div class="centre">
                <h:commandButton id="login" value="Connexion" action="#{userBean.login}" update="form" >
                <f:param name="IdUser" value="#{userBean.cin}"  >
                            </f:param> 
                </h:commandButton>
                <p:message for="login"></p:message>
            </div>
            <br></br>
            <div class="centre">
                <a href="AideAdmin.xhtml">Compte n'est pas accessible ?</a><br></br>
            </div>
            <div class="centre">
                <a href="authentification.xhtml">Connexion premier fois ?</a><br></br>
            </div>

        </h:form>

这是目标网页

                     !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:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui">
       <f:view contentType="text/html">
<h:head>


    <link rel="stylesheet" type="text/css" href="css/styles.css" />
    <title>Profil: Portail IsetN</title>
    <link rel="stylesheet" href="css/style.css" media="screen" />
</h:head>
<f:metadata>
        <f:viewParam name="IdUser" value="#{userBean.cin}"
            converter="javax.faces.Long" />
        <f:viewParam name="IdUser" value="#{documentBean.cin}"
            converter="javax.faces.Long" />
    </f:metadata>
<h:body>

这是managedBeans代码

                 @ManagedBean(name="userBean")
           @SessionScoped
          public class UtilisateurBean implements java.io.Serializable {
private static final long serialVersionUID = 1L;
private Utilisateur newUtilisateur = new Utilisateur();
private List<SelectItem> etudsItem;
private DataModel utilisateurs;
private Utilisateur Utilisateur=new Utilisateur();
private Utilisateur editUtilisateur;
private Long cin;
private String nom;
private String prenom;
private String email;
private String password;

private DaoUtilisateur eDao = new DaoUtilisateur();

public String login(){
    try{
Utilisateur= eDao.findUtilisateurByEmail(email, password)   ;

if (Utilisateur==null){
    FacesMessage msg = new FacesMessage("Mot de passe ou email non valide");
    FacesContext.getCurrentInstance().addMessage(null, msg);
        return "loginfailed";
    }

else{
    cin=Utilisateur.getCin();
    System.out.println("cin connecté "+cin);
    return"loginUtilisateur";

}
    }
         catch(Exception ex){ return"loginfailed";} 
}

这是文档Bean代码

                 @ManagedBean(name="documentBean")
          @SessionScoped
          public class DocumentBean implements java.io.Serializable{

private static final long serialVersionUID = 1L;
private List<SelectItem> docItems;
private DataModel documents;
private List<Document> tps;
private List<Document> tds;
private List<Document> annonces;
private Document newDocument= new Document();
private Document editDocument;
private Long cin;
        public String create(){
    newDocument.setDateajout(new Date());
    System.out.println("your cin annonce  "+cin);
    dDao.ajouter(newDocument,cin);
    newDocument= new Document();
    documents.setWrappedData(dDao.selectAll());
    return null;
}

我想知道我错过了我更新了mojarra,更改了名称空间,更改了bean范围,但仍然无法正常工作。

1 个答案:

答案 0 :(得分:1)

我想,这是你所谓的工作流程:

  1. 用户在输入字段中输入电子邮件/密码,单击按钮
  2. 服务器检索正确的用户并填写user.cin字段
  3. 服务器将用户转发到目标网页
  4. 在这种假设下,你没有技术问题而是逻辑问题:

    1. 您加载登录页面并将(在此时未定义)user-cin写为http请求参数
    2. 您执行登录并发送http请求参数IdUsernull,请参阅1.)与登录操作并行
    3. 通过<f:viewParam />您获取null - 参数并将其注入documentBean。
    4. 我猜你必须选择不同的解决方案。希望它有所帮助...