2012-09-19 59 views
0

每当我单击h:commandButton时,与该操作关联的方法都不会被调用。 action="#{statusBean.update}"不工作,更新没有被调用。方法不从xhtml调用

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

看到这个职位: http://stackoverflow.com/questions/11426433/commandbutton-in-datalist-inside-tab-of-accordionpanel-is -pos posible-primefaces 我觉得你有同样的问题。 –

回答

0

你需要一个@ManagedBean标注为类和范围注释,例如

import javax.faces.bean.ManagedBean; 
import javax.faces.bean.ViewScoped; 

@ManagedBean 
@ViewScoped 
public class StatusBean { 
    ... 
} 
+0

我的状态Bean是请求作用域。我已经使用facesconfig.xml来设置bean的范围。 –

0

我面临同样的问题,然后我用A4J:jsFunction和问题得到解决

<a4j:jsFunction name="goToupdate" action="#{statusBean.update()}" </a4j:jsFunction>

现在您的H:的commandButton这个样子

<h:commandButton value="comment" onclick="goToupdate()"></h:commandButton>

0

使用<p:commandButton>而不是<h:commandButton>

例如。 <p:commandButton value="comment" action="#{statusBean.update}" process="@this" ></p:commandButton>

,并把鉴于范围bean的