我面临的问题是,单击h:commandLink按钮后,h:outputLabel没有显示任何内容。提交表单时,我已经使用了selectedUser来存储值,但是似乎selectedUser没有存储任何值。

1)这里是xhtml文件。

<!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:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:p="http://primefaces.org/ui"
    xmlns:c="http://java.sun.com/jsp/jstl/core">


<h:head></h:head>



<h:body class="thrColElsHdr">


        <div class="friends">

        <h4>Friends</h4>
        <h:form>
        <p:selectOneMenu value="#{chatBean.selectedUser}">
        <f:selectItems value="#{chatBean.friendList}" var="users" itemLabel="#{users.firstName}" itemValue="#{users}"/>
        </p:selectOneMenu>

        <h:commandLink>Chat</h:commandLink>
        </h:form>
        <br>
        </br>
        <h:outputLabel value="#{chatBean.selectedUser.firstName}"/>


        </div>




</h:body>
</html>


2)这里是chatBean,它是使用facesconfig.xml进行会话作用域的

package com.bean;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.faces.context.FacesContext;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
import javax.servlet.http.HttpSession;

import com.entity.Friend;
import com.entity.User;

public class ChatBean {
    private EntityManager em;
    private User selectedUser;


    public User getSelectedUser() {
        return selectedUser;
    }


    public void setSelectedUser(User selectedUser) {
        this.selectedUser = selectedUser;
    }


    public ChatBean(){
        selectedUser= new User();
        EntityManagerFactory emf=Persistence.createEntityManagerFactory("FreeBird");
         em =emf.createEntityManager();
    }


public List<User> getFriendList(){

        FacesContext context = FacesContext.getCurrentInstance();
        HttpSession session = (HttpSession) context.getExternalContext().getSession(true);
        User user=(User) session.getAttribute("userdet");
        Query query = em.createQuery("SELECT f FROM Friend f WHERE f.email='"+user.getEmail()+"' AND f.status=1",Friend.class);
         List<Friend> results =query.getResultList();
         ArrayList<User> friends = new ArrayList<User>();
         Iterator<Friend> it = results.iterator();
          while(it.hasNext()){
              System.out.println("in getFriendList...");

             User friend =em.find(User.class,it.next().getFriendEmail());
             friends.add(friend);
         }
          return friends;
}
}


3)这是用户实体类

package com.entity;

import java.io.Serializable;
import javax.persistence.*;


/**
 * The persistent class for the user database table.
 *
 */
@Entity
public class User implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    private String email;

    @Lob()
    private String aboutMe;

    private String birthDate;

    private String city;

    private String college;

    private String confirmation;

    private String contactNo;

    private String country;

    private String degree;

    private String firstName;

    private String gender;

    private String highSchool;

    private String image;

    private String interest;

    private String lastName;

    private String password;

    private int pincode;

    @Lob()
    private String quote;

    private String relationship;

    private String secondarySchool;

    private String state;

    private String street;

    private String university;

    private String userName;

    public User() {
    }

    public String getEmail() {
        return this.email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getAboutMe() {
        return this.aboutMe;
    }

    public void setAboutMe(String aboutMe) {
        this.aboutMe = aboutMe;
    }

    public String getBirthDate() {
        return this.birthDate;
    }

    public void setBirthDate(String birthDate) {
        this.birthDate = birthDate;
    }

    public String getCity() {
        return this.city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getCollege() {
        return this.college;
    }

    public void setCollege(String college) {
        this.college = college;
    }

    public String getConfirmation() {
        return this.confirmation;
    }

    public void setConfirmation(String confirmation) {
        this.confirmation = confirmation;
    }

    public String getContactNo() {
        return this.contactNo;
    }

    public void setContactNo(String contactNo) {
        this.contactNo = contactNo;
    }

    public String getCountry() {
        return this.country;
    }

    public void setCountry(String country) {
        this.country = country;
    }

    public String getDegree() {
        return this.degree;
    }

    public void setDegree(String degree) {
        this.degree = degree;
    }

    public String getFirstName() {
        return this.firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getGender() {
        return this.gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getHighSchool() {
        return this.highSchool;
    }

    public void setHighSchool(String highSchool) {
        this.highSchool = highSchool;
    }

    public String getImage() {
        return this.image;
    }

    public void setImage(String image) {
        this.image = image;
    }

    public String getInterest() {
        return this.interest;
    }

    public void setInterest(String interest) {
        this.interest = interest;
    }

    public String getLastName() {
        return this.lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getPassword() {
        return this.password;
    }

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

    public int getPincode() {
        return this.pincode;
    }

    public void setPincode(int pincode) {
        this.pincode = pincode;
    }

    public String getQuote() {
        return this.quote;
    }

    public void setQuote(String quote) {
        this.quote = quote;
    }

    public String getRelationship() {
        return this.relationship;
    }

    public void setRelationship(String relationship) {
        this.relationship = relationship;
    }

    public String getSecondarySchool() {
        return this.secondarySchool;
    }

    public void setSecondarySchool(String secondarySchool) {
        this.secondarySchool = secondarySchool;
    }

    public String getState() {
        return this.state;
    }

    public void setState(String state) {
        this.state = state;
    }

    public String getStreet() {
        return this.street;
    }

    public void setStreet(String street) {
        this.street = street;
    }

    public String getUniversity() {
        return this.university;
    }

    public void setUniversity(String university) {
        this.university = university;
    }

    public String getUserName() {
        return this.userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

}

最佳答案

您的托管bean必须具有相应的注释:

@ViewScoped
@ManagedBean
public class ChatBean {
    //...
}


可以使用以下技巧之一来更正示例:


action添加到<h:commandLink>并将其绑定到返回页面名称的方法。这样,页面将被刷新,并在#{chatBean.selectedUser.firstName}中显示新值:

<h:commandLink action="#{chatBean.refresh}" value="Chat" />



在您的课程中:

public String refresh() {
    return "index";
}



将ajax行为添加到您的<h:commandLink>中以更新<h:outputLabel>。您应该在<h:outputLabel>中添加一个id属性:

<h:commandLink value="Chat">
    <f:ajax render=":theLabel" />
</h:commandLink>
<!-- jsf code -->
<h:outputLabel id="theLabel" value="#{chatBean.selectedUser.firstName}"/>

09-28 12:40