Hibernate <;f:setPropertyActionListener/>;:无更新

Hibernate <;f:setPropertyActionListener/>;:无更新,hibernate,spring,jsf,primefaces,Hibernate,Spring,Jsf,Primefaces,我对属性有问题。字段不会使用目标中保存的值进行更新。调试时,我发现目标已使用该值初始化,但当我尝试在xhtm页面中提取数据时,它不起作用 代码如下: 下面是支持Bean: import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.Serializable; import java.util.Arr

我对
属性有问题。字段不会使用目标中保存的值进行更新。调试时,我发现目标已使用该值初始化,但当我尝试在xhtm页面中提取数据时,它不起作用

代码如下:



下面是支持Bean:

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import org.primefaces.model.UploadedFile;
import tn.projet.model.Categorie;
import tn.projet.service.CategorieService;
import javax.annotation.PostConstruct;
import javax.faces.context.FacesContext;
import javax.servlet.ServletContext;




public class CategorieBean implements Serializable{



//DI via Spring

private CategorieService categorieService;
private List<Categorie> categories;
private String nom;
private String desc;
private Categorie selectedCategorie;
private String image;
private UploadedFile fichier;
private UploadedFile fichiermodif;


@PostConstruct
public void init()
    {


        this.categories = new ArrayList<Categorie>();

        categories=categorieService.listerCategorie();

    }

/***********GETTERS/SETTERS**********/

public UploadedFile getFichiermodif() {
    return fichiermodif;
}

public void setFichiermodif(UploadedFile fichiermodif) {
    this.fichiermodif = fichiermodif;
}

public UploadedFile getFichier() {
    return fichier;
}

public void setFichier(UploadedFile fichier) {
    this.fichier = fichier;
}



public CategorieBean() {

}


public String getDesc() {
    return desc;
}

public void setDesc(String desc) {
    this.desc = desc;
}

public String getNom() {
    return nom;
}

public void setNom(String nom) {
    this.nom = nom;
}


    public CategorieService getCategorieService() {
    return categorieService;
}


public void setCategorieService(CategorieService categorieService) {
    this.categorieService = categorieService;
}






//recupérer la liste des catégories
public List<Categorie> getCategories()
{

return categories;
}


public Categorie getSelectedCategorie() {


    return this.selectedCategorie;
    }



public void setSelectedCategorie(Categorie select) {
    this.selectedCategorie =  select;
    }


public String getImage() {
    return image;
}

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




/**************CRUD***********************/
 //recupération du fichier image uploadé
public String creerFichier(UploadedFile fich) throws Exception{

    ServletContext servletContext = (ServletContext) FacesContext.getCurrentInstance().getExternalContext().getContext();

    String retour =fich.getFileName();

    String aux_f = servletContext.getRealPath("/")+retour;   

    File result = new File( aux_f); 

    try {
        FileOutputStream fileOutputStream = new FileOutputStream(result);

        byte[] buffer = new byte[6124];

        int bulk;
        InputStream inputStream = fich.getInputstream();
        while (true) {
            bulk = inputStream.read(buffer);
            if (bulk < 0) {
                break;
            }
            fileOutputStream.write(buffer, 0, bulk);
            fileOutputStream.flush();
        }

        fileOutputStream.close();
        inputStream.close();




    } catch (IOException e) {e.printStackTrace();}

    return retour;
}



    public void modifier()
    {
        if(fichiermodif!=null)
        {
            try {
                String imagemodif= creerFichier(fichiermodif);
                selectedCategorie.setImage(imagemodif);
            } catch (Exception e) {e.printStackTrace();}

        }

        categorieService.modifierCategorie(selectedCategorie);
    }
    //add a new Categorie data into database
    public void ajouter(){

        if(fichiermodif!=null)
        {
            try {
                image= creerFichier(fichier);
            } catch (Exception e) {e.printStackTrace();}

        }


        Categorie cat = new Categorie();
        cat.setNom(getNom());
        cat.setDesc(getDesc());
        cat.setImage(image);
        categorieService.ajouterCategorie(cat);

        }


  /******************actionListener****************/
    public void edit(){

        System.out.println("selectedCategorie.getNom()");

    }



}
导入java.io.File;
导入java.io.FileOutputStream;
导入java.io.IOException;
导入java.io.InputStream;
导入java.io.Serializable;
导入java.util.ArrayList;
导入java.util.List;
导入org.primefaces.model.UploadedFile;
导入tn.projet.model.Categorie;
导入tn.projet.service.CategorieService;
导入javax.annotation.PostConstruct;
导入javax.faces.context.FacesContext;
导入javax.servlet.ServletContext;
公共类CategorieBean实现可序列化{
//通过弹簧
私人分类服务分类服务;
私人名单类别;
私有字符串名称;
私有字符串描述;
私有分类选择分类;
私有字符串图像;
私有上传文件fichier;
私有上传文件fichiermodif;
@施工后
公共void init()
{
this.categories=新的ArrayList();
categories=categorieService.listerCategorie();
}
/***********能手/二传手**********/
公共上载文件getFichiermodif(){
返回菲希尔莫迪夫;
}
public void setFichiermodif(上传文件fichiermodif){
this.fichiermodif=fichiermodif;
}
公共上载文件getFichier(){
返回菲舍尔;
}
public void setFichier(上传文件fichier){
this.fichier=fichier;
}
公共分类{
}
公共字符串getDesc(){
返回描述;
}
公共void setDesc(字符串desc){
this.desc=desc;
}
公共字符串getNom(){
返回名称;
}
公共无效集合名(字符串名){
this.nom=nom;
}
公共分类服务getCategorieService(){
返回分类服务;
}
public void setCategorieService(CategorieService CategorieService){
this.categorieService=categorieService;
}
//猫之列重现
公共列表getCategories()
{
退货类别;
}
公共分类getSelectedCategorie(){
返回此。SelectedCategory;
}
公共无效集合选定类别(类别选择){
this.selectedCategorie=select;
}
公共字符串getImage(){
返回图像;
}
公共void setImage(字符串图像){
这个图像=图像;
}
/**************积垢***********************/
//菲希尔图像上传重现
公共字符串CreerFicher(UploadedFile fich)引发异常{
ServletContext ServletContext=(ServletContext)FacesContext.getCurrentInstance().getExternalContext().getContext();
字符串retour=fich.getFileName();
字符串aux\u f=servletContext.getRealPath(“/”)+retour;
文件结果=新文件(辅助文件);
试一试{
FileOutputStream FileOutputStream=新的FileOutputStream(结果);
字节[]缓冲区=新字节[6124];
整块;
InputStream InputStream=fich.getInputstream();
while(true){
bulk=inputStream.read(缓冲区);
如果(体积<0){
打破
}
写入(缓冲区,0,大容量);
fileOutputStream.flush();
}
fileOutputStream.close();
inputStream.close();
}catch(IOE异常){e.printStackTrace();}
回归回归;
}
公共无效修饰符()
{
if(fichiermodif!=null)
{
试一试{
字符串imagemodif=creerFichier(fichiermodif);
选择分类设置图像(imagemodif);
}catch(异常e){e.printStackTrace();}
}
分类服务。修改分类(已选择分类);
}
//将新的分类数据添加到数据库中
公共空间{
if(fichiermodif!=null)
{
试一试{
图像=滤线器(fichier);
}catch(异常e){e.printStackTrace();}
}
Categorie cat=新的Categorie();
cat.setNom(getNom());
cat.setDesc(getDesc());
cat.setImage(图像);
分类服务。外部分类(cat);
}
/******************actionListener****************/
公共作废编辑(){
System.out.println(“selectedCategorie.getNom()”;
}
}

您可能会遇到2.2.1中Primefaces dataTable组件的错误,其中从dataTable中触发的回发不会导致组件更新


我在a中发布了一个解决方案。

您使用什么版本的Primefaces?我使用的是最新版本3.0
</h:head>
<h:body>

<h:form id="form" enctype="multipart/form-data">

  <p:commandLink value="Ajouter" oncomplete="newcatDialog.show()" />  

<p:dataTable  value="#{categorieBean.categories}" var="categ"  id="table" >
<f:facet name="header"> 
  <h:outputText value="Catégories" /> 
</f:facet>
 <p:column>
 <h:outputText id="id" value="#{categ.id}"/>
 </p:column>
 <p:column>
 <h:outputText id="nom" value="#{categ.nom}"/>
 </p:column>

 <p:column>
    <p:commandLink   update="display"  value="Modifier" onclick="catDialog.show()" >  
       <f:setPropertyActionListener  value="#{categ}"  
            target="#{categorieBean.selectedCategorie}" />
    </p:commandLink>                       
 </p:column>


</p:dataTable>



  <p:dialog id="creation" header="Catégorie" widgetVar="newcatDialog" resizable="false" 
      autoSized="true" modal="true">

    <h:panelGrid id="ceationDisplay" columns="2" cellpadding="4"> 
     <h:column><h:outputText value="Nom: " /></h:column>
           <h:column>
             <h:inputText value="#{categorieBean.nom}" />
           </h:column>
           <h:column>
             <h:outputText value="Description: " />
           </h:column>
           <h:column>
             <h:inputText value="#{categorieBean.desc}" />
           </h:column> 
           <h:column>
            <h:outputText value="Photo: " />
           </h:column>
           <h:column>
             <p:fileUpload value="#{categorieBean.fichier}"  mode="simple" auto="true"
             allowTypes="/(\.|\/)(gif|jpe?g|png)$/" />  

           </h:column>
           <h:column>
            <p:commandButton value="Enregistrer"
                             actionListener="#{categorieBean.ajouter}" 
                             oncomplete="newcatDialog.hide()"
                             update="table"
                             ajax="false"
                             >

            </p:commandButton>
           </h:column>
           <h:column>   
            <p:commandButton value="Annuler" oncomplete="newcatDialog.hide()" ></p:commandButton>
           </h:column> 
           </h:panelGrid>


  </p:dialog>   
</h:form>

<!-- ************************ -->

  <p:dialog id="modification" header="Catégorie" widgetVar="catDialog"  resizable="false" 
      autoSized="true" modal="true" appendToBody="true">
    <h:form>
    <h:panelGrid id="display" columns="2" cellpadding="4"> 
     <h:column><h:outputText value="Nom: " /></h:column>
           <h:column>
             <h:inputText value="#{categorieBean.selectedCategorie.nom}" />
           </h:column>
           <h:column>
             <h:outputText value="Description: " />
           </h:column>
           <h:column>
             <h:inputText value="#{categorieBean.selectedCategorie.desc}" />
           </h:column> 
           <h:column>
            <h:outputText value="Photo: " />
           </h:column>
           <h:column>
             <p:fileUpload value="#{categorieBean.fichiermodif}"  mode="simple" auto="true"
             allowTypes="/(\.|\/)(gif|jpe?g|png)$/" />  

           </h:column>
           <h:column>
            <p:commandButton value="Enregistrer"
                             actionListener="#{categorieBean.modifier}" 
                             oncomplete="catDialog.hide()"
                             update="table"
                             ajax="false"
                             >

            </p:commandButton>
           </h:column>
           <h:column>   
            <p:commandButton value="Annuler"     oncomplete="catDialog.hide()" ></p:commandButton>
           </h:column> 
           </h:panelGrid>
      </h:form>

  </p:dialog>

</h:body>
</f:view>
</html>
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import org.primefaces.model.UploadedFile;
import tn.projet.model.Categorie;
import tn.projet.service.CategorieService;
import javax.annotation.PostConstruct;
import javax.faces.context.FacesContext;
import javax.servlet.ServletContext;




public class CategorieBean implements Serializable{



//DI via Spring

private CategorieService categorieService;
private List<Categorie> categories;
private String nom;
private String desc;
private Categorie selectedCategorie;
private String image;
private UploadedFile fichier;
private UploadedFile fichiermodif;


@PostConstruct
public void init()
    {


        this.categories = new ArrayList<Categorie>();

        categories=categorieService.listerCategorie();

    }

/***********GETTERS/SETTERS**********/

public UploadedFile getFichiermodif() {
    return fichiermodif;
}

public void setFichiermodif(UploadedFile fichiermodif) {
    this.fichiermodif = fichiermodif;
}

public UploadedFile getFichier() {
    return fichier;
}

public void setFichier(UploadedFile fichier) {
    this.fichier = fichier;
}



public CategorieBean() {

}


public String getDesc() {
    return desc;
}

public void setDesc(String desc) {
    this.desc = desc;
}

public String getNom() {
    return nom;
}

public void setNom(String nom) {
    this.nom = nom;
}


    public CategorieService getCategorieService() {
    return categorieService;
}


public void setCategorieService(CategorieService categorieService) {
    this.categorieService = categorieService;
}






//recupérer la liste des catégories
public List<Categorie> getCategories()
{

return categories;
}


public Categorie getSelectedCategorie() {


    return this.selectedCategorie;
    }



public void setSelectedCategorie(Categorie select) {
    this.selectedCategorie =  select;
    }


public String getImage() {
    return image;
}

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




/**************CRUD***********************/
 //recupération du fichier image uploadé
public String creerFichier(UploadedFile fich) throws Exception{

    ServletContext servletContext = (ServletContext) FacesContext.getCurrentInstance().getExternalContext().getContext();

    String retour =fich.getFileName();

    String aux_f = servletContext.getRealPath("/")+retour;   

    File result = new File( aux_f); 

    try {
        FileOutputStream fileOutputStream = new FileOutputStream(result);

        byte[] buffer = new byte[6124];

        int bulk;
        InputStream inputStream = fich.getInputstream();
        while (true) {
            bulk = inputStream.read(buffer);
            if (bulk < 0) {
                break;
            }
            fileOutputStream.write(buffer, 0, bulk);
            fileOutputStream.flush();
        }

        fileOutputStream.close();
        inputStream.close();




    } catch (IOException e) {e.printStackTrace();}

    return retour;
}



    public void modifier()
    {
        if(fichiermodif!=null)
        {
            try {
                String imagemodif= creerFichier(fichiermodif);
                selectedCategorie.setImage(imagemodif);
            } catch (Exception e) {e.printStackTrace();}

        }

        categorieService.modifierCategorie(selectedCategorie);
    }
    //add a new Categorie data into database
    public void ajouter(){

        if(fichiermodif!=null)
        {
            try {
                image= creerFichier(fichier);
            } catch (Exception e) {e.printStackTrace();}

        }


        Categorie cat = new Categorie();
        cat.setNom(getNom());
        cat.setDesc(getDesc());
        cat.setImage(image);
        categorieService.ajouterCategorie(cat);

        }


  /******************actionListener****************/
    public void edit(){

        System.out.println("selectedCategorie.getNom()");

    }



}