【问题标题】:viewParam returning a null valueviewParam 返回一个空值
【发布时间】:2014-02-11 21:25:59
【问题描述】:

我试图在我的应用程序中获取当前用户的 ID,当他创建一个文档以使用用户的 ID 注册该文档时。但是当使用<f:viewParam> 时,doument bean 中的用户 ID 始终为空。

这是我的代码:

         <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,更改了命名空间,更改了 beans 范围,但它仍然无法正常工作。

【问题讨论】:

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


    【解决方案1】:

    我想,这是你假设的工作流程:

    1. 用户在输入字段中输入电子邮件/密码,点击按钮
    2. 服务器检索正确的用户并填写user.cin字段
    3. 服务器将用户转发到目标页面

    在此假设下,您没有技术问题而是逻辑问题:

    1. 您加载登录页面并将(此时未定义)user-cin 写入 http 请求参数
    2. 您进行登录并发送 http 请求参数IdUser(即null,参见 1.)与登录操作并行
    3. 通过&lt;f:viewParam /&gt; 获取null 参数并将其注入到documentBean。

    我猜你必须选择不同的解决方案。希望对你有帮助...

    【讨论】:

    • 我改用&lt;f:setPropertyActionListener&gt;,现在可以使用了
    • 很好,所以将答案标记为“正确”,这样它也可能对其他人有所帮助。 :-)
    • 确实我打算将其标记为答案,这是一个逻辑问题
    猜你喜欢
    • 2015-10-09
    • 2021-12-03
    • 2021-12-05
    • 1970-01-01
    • 2016-07-17
    • 2021-04-14
    • 2017-09-02
    • 2018-04-22
    • 1970-01-01
    相关资源
    最近更新 更多