每当我点击h:commandButton时,都不会调用与该操作关联的方法。action="#{statusBean.update}"
不起作用,更新未被调用。
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">
<h:head></h:head>
<h:body>
<h:form >
<p:dataList value="#{statusBean.statusList}" var="p">
<h:outputText value="#{p.statusId}-#{p.statusmsg}"/><br/>
<p:inputText value="#{statusBean.comment.comment}"/>
<h:commandButton value="comment" action="#{statusBean.update}"></h:commandButton>
</p:dataList>
</h:form>
</h:body>
</html>
2)这是我的statusBean
package com.bean;
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.Album;
import com.entity.Comment;
import com.entity.Status;
import com.entity.User;
public class StatusBean {
Comment comment;
Status status;
private EntityManager em;
public Comment getComment() {
return comment;
}
public void setComment(Comment comment) {
this.comment = comment;
}
public Status getStatus() {
return status;
}
public void setStatus(Status status) {
this.status = status;
}
public StatusBean(){
comment = new Comment();
status=new Status();
EntityManagerFactory emf=Persistence.createEntityManagerFactory("FreeBird");
em =emf.createEntityManager();
}
public String save(){
FacesContext context = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) context.getExternalContext().getSession(true);
User user = (User) session.getAttribute("userdet");
status.setEmail(user.getEmail());
System.out.println("status save called");
em.getTransaction().begin();
em.persist(status);
em.getTransaction().commit();
return "success";
}
public List<Status> getStatusList(){
FacesContext context = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) context.getExternalContext().getSession(true);
User user=(User) session.getAttribute("userdet");
Query query = em.createQuery("SELECT s FROM Status s WHERE s.email='"+user.getEmail()+"'", Status.class);
List<Status> results =query.getResultList();
return results;
}
public String update(){
System.out.println("Update Called...");
//comment.setStatusId(Integer.parseInt(statusId));
em.getTransaction().begin();
em.persist(comment);
em.getTransaction().commit();
return "success";
}
}
答案 0 :(得分:0)
您需要为您的班级和范围注释添加@ManagedBean
注释,例如
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
@ManagedBean
@ViewScoped
public class StatusBean {
...
}
答案 1 :(得分:0)
我遇到了同样的问题然后我使用了a4j:jsFunction并解决了问题
<a4j:jsFunction name="goToupdate"
action="#{statusBean.update()}"
</a4j:jsFunction>
现在你的h:commandButton看起来像这样
<h:commandButton value="comment" onclick="goToupdate()"></h:commandButton>
答案 2 :(得分:0)
使用<p:commandButton>
代替<h:commandButton>
例如。<p:commandButton value="comment" action="#{statusBean.update}" process="@this" ></p:commandButton>
并将您的bean放入视图范围