我面临的问题是,单击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}"/>