0

我正在使用 JSF 2 和 Hibernate。我有 XHTML 页面,其中 bean 从数据库中获取并插入到页面中。当我更改 bean 的值并提交 savign 时,我只得到最后一个值。我做错了什么?

这是我的 XHTML 页面表单代码:

<h:form id="edit-slide-form">

<h:panelGrid columns="2">

    <h:outputText value="#{msgs.slideTitle}" styleClass="label"/>
    <h:inputText id="title" value="#{sliderAction.newSlide.title}" name="#{sliderAction.slide.title}" required="true"/>
    <p></p><h:message for="title" errorClass="error"/>

    <h:outputText value="#{msgs.description}" styleClass="label"/>
    <h:inputTextarea id="description" value="#{sliderAction.newSlide.description}" name="#{sliderAction.slide.description}" required="true"/>                                                               
    <p></p><h:message for="description" errorClass="error"/>

    <p></p>
    <h:commandButton value="#{msgs.save}" action="#{sliderAction.saveChanges}" styleClass="button"/>
    <h:message for="edit-slide-form"/>

</h:panelGrid>

</h:form>

当我提交此表单时,我只能获得最后一个值(例如 id="description")。

SliderAction.class

@Named
@SessionScoped
public class SliderAction implements Serializable {

private static final long serialVersionUID = 1L;
private EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("iaau");
private EntityManager entityManager;

private int id;
private Integer coordinates[] = new Integer[4];
private Image image = new Image();  
private Slide slide = new Slide();
private Slide newSlide = new Slide();
private List<Slide> slides = new ArrayList<Slide>();
private UploadedFile uploadedFile;
private boolean uploaded;

public String uploadSlideImage() {

    ImageAction imageAction = new ImageAction();

    if( uploaded ) {    
        imageAction.delete( image.getUniqueName(), image.getThumb() );
        for( int i = 0; i < coordinates.length; i++ ) {
            coordinates[i] = null;
        }
    }

    imageAction.upload(uploadedFile, false);

    setImage( imageAction.getImage() );

    uploaded = true;

    return null;
}

public String cropAndSave(){

    ImageAction imageAction = new ImageAction();
    imageAction.cropSlide( image, coordinates, 928, 318 );

    newSlide = new Slide();
    newSlide.setImage( image );

    startTransaction();
    entityManager.persist(image);
    entityManager.persist(newSlide);
    endTransaction();
    closeTransaction();

    uploaded = false;
    setId(newSlide.getId());

    return "edit";
}

public String saveChanges() {

    startTransaction();
    entityManager.merge(newSlide);
    endTransaction();
    closeTransaction();

    return "list";
}

public void deleteSlide() {
    startTransaction();
    slide = (Slide)entityManager.find(Slide.class, id);
    entityManager.remove(slide);
    endTransaction();
    closeTransaction();

    ImageAction imageAtion = new ImageAction();
    imageAtion.delete(slide.getImage().getUniqueName(), slide.getImage().getThumb());
}

public Slide getSlide() {

    startTransaction();
    slide = entityManager.find(Slide.class, id);        
    endTransaction();
    closeTransaction();

    return slide;
}

public void setSlide(Slide slide) {
    this.slide = slide;
}

public Slide getNewSlide() {

    startTransaction();
    newSlide = entityManager.find(Slide.class, id);     
    endTransaction();
    closeTransaction();

    return newSlide;
}

public void setNewSlide(Slide newSlide) {
    this.newSlide = newSlide;
}

@SuppressWarnings("unchecked")
public List<Slide> getSlides() {
    startTransaction();
    slides = entityManager.createQuery("from Slide").getResultList();
    endTransaction();
    closeTransaction();

    return slides;
}

/*Declaration of EntityManager and other getter and setter methods*/

}

幻灯片类

@Entity
public class Slide extends AbstractEntity<Integer>{

private static final long serialVersionUID = 1L;

private String title;
private String description;
private Image image;
private String link;
private Page page;
private boolean showOnFeed;
private boolean approved;   

public String getTitle() {
    return title;
}

public void setTitle(String title) {
    this.title = title;
}   

public String getDescription() {
    return description;
}

public void setDescription(String description) {
    this.description = description;
}

@OneToOne
public Image getImage() {
    return image;
}

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

public String getLink() {
    return link;
}

public void setLink(String link) {
    this.link = link;
}

@OneToOne
public Page getPage() {
    return page;
}

public void setPage(Page page) {
    this.page = page;
}
@Column(name="show_on_feed")
public boolean isShowOnFeed() {
    return showOnFeed;
}

public void setShowOnFeed(boolean showOnFeed) {
    this.showOnFeed = showOnFeed;
}

public boolean isApproved() {
    return approved;
}

public void setApproved(boolean approved) {
    this.approved = approved;
}

}

我也注意到这个警告信息:

[org.hibernate.ejb.internal.EntityManagerFactoryRegistry] (http-localhost-127.0.0.1-8080-1) HHH000436: Entity manager factory name (iaau) is already registered.  If entity manager will be clustered or passivated, specify a unique value for property 'hibernate.ejb.entitymanager_factory_name'

这会导致这样的问题吗

4

0 回答 0