【问题标题】:deleting a row in integration of jsf spring hibernate primefaces删除 jsf spring hibernate primefaces 集成中的一行
【发布时间】:2012-08-05 11:02:28
【问题描述】:

我在我的项目中使用了 jsf hibernate spring primfaces 的集成。我想删除我的 primefaces 数据表中的行。但我不确定我的托管 bean 中的删除方法。当我想删除我有以下错误。请帮我编写正确的 deletePersonel 方法。

/personel.xhtml @95,74 actionListener="#{personelMB.deletePersonel()}": java.lang.IndexOutOfBoundsException: Index: 0, Size: 0

Personel.java

@Entity
@Table(name="TBLPERSONEL")
public class Personel {
@Id
@Column(name="PERSONEL_ID")
private int personel_id;
@Column(name="PNAME")
private String pname;
@Column(name="PFAMILY")
private String pfamily;
@Column(name="PADDRESS")
private String paddress;
@Column(name="PPHONE")
private String pphone;
@OneToOne
@PrimaryKeyJoinColumn
private Manager manager;
@OneToMany(mappedBy="personel")
private Set<Stufftransfer> stufftransfers;
public Personel(){

}
//getter and setter

人事道

public class PersonelDao implements IPersonelDao {
private SessionFactory sessionFactory;



public SessionFactory getSessionFactory() {
    return sessionFactory;
}

public void setSessionFactory(SessionFactory sessionFactory) {
    this.sessionFactory = sessionFactory;
}
public void deletePersonel(Personel personel) {
    getSessionFactory().getCurrentSession().delete(personel);

}

人事服务

@Transactional(readOnly=true)
public class PersonelService implements IPersonelService{
    IPersonelDao personeldao;

    public IPersonelDao getPersoneldao() {
        return personeldao;
    }

    public void setPersoneldao(IPersonelDao personeldao) {
        this.personeldao = personeldao;
    }
@Transactional(readOnly=false)
    @Override
    public void deletePersonel(Personel personel) {
        getPersoneldao().deletePersonel(personel);

    }

PersonelBean

@ManagedBean(name="personelMB")
@SessionScoped
public class PersonelBean implements Serializable{
    private static final long serialVersionUID = 1L;

    @ManagedProperty(value="#{PersonelService}")
    IPersonelService personelservice;
    List<Personel> personelList;

    private int personel_id;
    private String pname;
    private String pfamily;
    private String paddress;
    private String pphone;
public IPersonelService getPersonelservice() {
        return personelservice;
    }
    public void setPersonelservice(IPersonelService personelservice) {
        this.personelservice = personelservice;
    }
    public List<Personel> getPersonelList() {
        personelList=new ArrayList<Personel>();
        personelList.addAll(getPersonelservice().getPersonels());
        return personelList;
    }
    public void setPersonelList(List<Personel> personelList) {
        this.personelList = personelList;
    }
public void addPersonel(){
        Personel personel=new Personel();
        personel.setPaddress(getPaddress());
        personel.setPersonel_id(getPersonel_id());
        personel.setPfamily(getPfamily());
        personel.setPname(getPname());
        personel.setPphone(getPphone());
        getPersonelservice().addPersonel(personel);
    }
    public void deletePersonel(){
        Personel personel=(Personel)personelservice.getPersonelId(personel_id);
getPersonelservice().deletePersonel(personel);
    }
//getter and setter

personel.xhtml

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html dir="rtl" 
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:fn="http://java.sun.com/jsp/jstl/functions"
>
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>اطلاعات پرسنلی</title>
</h:head>
<h:body>
<h1>اضافه کردن پرسنل جدید</h1>
        <h:form>

            <h:panelGrid columns="4" >
              شماره پرسنلی : 
                <h:inputText id="id" value="#{personelMB.personel_id}" 
                    size="20" required="true"
                    label="id" >
                </h:inputText>
                <br></br>
                نام : 
                <h:inputText id="name" value="#{personelMB.pname}" 
                    size="20" required="true"
                    label="Name" >
                </h:inputText>

                 نام خانوادگی: 
                <h:inputText id="family" value="#{personelMB.pfamily}" 
                    size="20" required="true"
                    label="family" >
                </h:inputText> 

                آدرس : 
                <h:inputTextarea id="address" value="#{personelMB.paddress}" 
                    cols="30" rows="10" required="true"
                    label="Address" >
                </h:inputTextarea>


          تلفن:  
                <h:inputText id="tel" value="#{personelMB.pphone}" 
                    size="20" required="true"
                    label="tel" >
                </h:inputText> 
            </h:panelGrid>

            <h:commandButton value="درج اطلاعات" action="#{personelMB.addPersonel()}" />

        </h:form>
 <h2>مشاهده اطلاعات پرسنل</h2>  
 <h:form prependId="false">  

    <p:dataTable id="dataTable" var="personel" value="#{personelMB.personelList}" rowKey="#{personelMB.personel_id}">  

        <f:facet name="header">  
            اطلاعات پرسنل 
        </f:facet>  

        <p:column>  
            <f:facet name="header">  
               شماره پرسنلی  
            </f:facet>  

            <h:outputText value="#{personel.personel_id}" />  

            <f:facet name="footer">  
                کدملی 
            </f:facet>  
        </p:column>  

        <p:column headerText="نام">  
            <h:outputText value="#{personel.pname}" />  
        </p:column>  

        <p:column headerText="نام خانوادگی">  
            <h:outputText value="#{personel.pfamily}" />  
        </p:column>  

        <p:column headerText="آدرس">  
            <h:outputText value="#{personel.paddress}" />  
        </p:column>  
   <p:column headerText="تلفن">  
            <h:outputText value="#{personel.pphone}" />  
        </p:column>
        <p:column>
      <f:facet name="حذف">
         <h:outputText value="" />
      </f:facet>
      <p:commandButton icon="ui-icon-close" title="حذف"
                       actionListener="#{personelMB.deletePersonel()}" />
   </p:column>
        <f:facet name="footer">  
            تعداد رکورد#{fn:length(personelMB.getPersonelList())} میباشد.  
        </f:facet>  

    </p:dataTable>  

</h:form>  

</h:body>
</html>

请帮助我在我的 PersonelBean.java 中编写正确的 deletePersonel。

【问题讨论】:

    标签: java spring hibernate jakarta-ee primefaces


    【解决方案1】:

    像这样改变你的托管 bean 删除方法;

       public void deletePersonel(int personel_id){
           Personel personel=(Personel)personelservice.getPersonelId(personel_id);
           getPersonelservice().deletePersonel(personel);
       }
    

    并且也改变你的 xhtml 喜欢这个;

      <p:commandButton icon="ui-icon-close" title="حذف"
                       actionListener="#{personelMB.deletePersonel(personel.personel_id)}" />
    

    像这样向您的托管 bean 添加刷新方法;

     public String deleteAction(Personel personel) {
        personelList.remove(personel);
        return null;
      }
    

    并像这样编辑您的 p:commandButton;

      <p:commandButton icon="ui-icon-close" title="حذف"
                       actionListener="#{personelMB.deletePersonel(personel.personel_id)" action="#{personelMB.delectAction(personel)}"/>
    

    【讨论】:

    • 非常感谢,请告诉我删除后如何刷新数据表?
    • 我有这个错误:/personel.xhtml @96,139 action="#{personelMB.deleteAction(personel)}":找不到方法:managedbean.PersonelBean@4487c2f5.deleteAction(model.Personel)
    • @sami 下载并添加 jboss el jar 然后也填写这个com.sun.faces.expressionFactoryorg. jboss.el.E​​xpressionFactoryImpl in web.xml
    • 亲爱的Sai Ye Yan Naing Aye,感谢您的关注。我添加了jar文件。我没有错误,但删除一行后数据表没有刷新。
    猜你喜欢
    • 1970-01-01
    • 2018-11-11
    • 2012-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-22
    • 2012-08-22
    • 2012-07-02
    相关资源
    最近更新 更多