Hibernate JSF更新实体不';我不能正常工作
我正在尝试使用JSF2和Hibernate开发一个web应用程序,对于服务器,我使用JBossAS7。我有一个实体幻灯片和一个bean幻灯片动作。我可以成功地将实体添加到数据库中并删除它们,但在编辑实体时会带来麻烦。在编辑页面上,我填充我的实体并显示给用户进行编辑,当用户提交时,只有实体的最后一个属性得到更新 这是幻灯片Hibernate JSF更新实体不';我不能正常工作,hibernate,jsf-2,Hibernate,Jsf 2,我正在尝试使用JSF2和Hibernate开发一个web应用程序,对于服务器,我使用JBossAS7。我有一个实体幻灯片和一个bean幻灯片动作。我可以成功地将实体添加到数据库中并删除它们,但在编辑实体时会带来麻烦。在编辑页面上,我填充我的实体并显示给用户进行编辑,当用户提交时,只有实体的最后一个属性得到更新 这是幻灯片 @Entity public class Slide extends AbstractEntity<Integer>{ private static final
@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;
private boolean cropped;
public String getTitle() {
return title;
}
public void setTitle(String title) {
System.out.println( getId() + " = TITLE = " + title );
this.title = title;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
System.out.println( getId() + " = DESC = " + 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) {
System.out.println( getId() + " = PAGE = " + page.getHeading() );
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;
}
public boolean isCropped() {
return cropped;
}
public void setCropped(boolean cropped) {
this.cropped = cropped;
}
}
@实体
公共类幻灯片扩展了抽象实体{
私有静态最终长serialVersionUID=1L;
私有字符串标题;
私有字符串描述;
私有图像;
私有字符串链接;
私人网页;
私有布尔showOnFeed;
私营机构获批准;
私有布尔裁剪;
公共字符串getTitle(){
返回标题;
}
公共无效集合标题(字符串标题){
System.out.println(getId()+“=TITLE=“+TITLE”);
this.title=标题;
}
公共字符串getDescription(){
返回说明;
}
公共void集合描述(字符串描述){
System.out.println(getId()+“=DESC=“+description”);
this.description=描述;
}
@奥内托内
公共映像getImage(){
返回图像;
}
公共void setImage(图像){
这个图像=图像;
}
公共字符串getLink(){
返回链接;
}
公共无效设置链接(字符串链接){
this.link=link;
}
@奥内托内
公共页面getPage(){
返回页面;
}
公共无效设置页(第页){
System.out.println(getId()+“=PAGE=“+PAGE.getHeading());
this.page=page;
}
@列(name=“在订阅源上显示订阅”)
公共布尔值isShowOnFeed(){
返回showOnFeed;
}
公共void设置showOnFeed(布尔值showOnFeed){
this.showOnFeed=showOnFeed;
}
公共布尔值已批准(){
已批准退货;
}
已批准的公共文件集(已批准的布尔值){
这个.已批准的=已批准的;
}
公共布尔值isCropped(){
复种;
}
公共空间设置裁剪(布尔裁剪){
this.crapped=裁剪过的;
}
}
SliderAction.class
@Named
@RequestScoped
public class SliderAction {
private EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("db");
private EntityManager entityManager;
private int id;
private int pageId;
private Integer coordinates[] = new Integer[4];
private Image image;
private Slide slide = new Slide();
private List<Slide> slides = new ArrayList<Slide>();
private List<Slide> publicSlides = new ArrayList<Slide>();
private UploadedFile uploadedFile;
private boolean externalLink = false;
private boolean editable = true;
public String add() {
return "add";
}
public String addSlide() {
ImageAction imageAction = new ImageAction();
imageAction.upload(uploadedFile, false);
image = imageAction.getImage();
slide.setImage( image );
slide.setCropped( false );
startTransaction();
if( !externalLink ) {
slide.setPage(entityManager.find(Page.class, pageId));
}
entityManager.persist(image);
entityManager.persist(slide);
endTransaction();
closeTransaction();
setId(slide.getId());
return "details";
}
public void editSlide() {
System.out.println(slide);
startTransaction();
entityManager.merge(slide);
endTransaction();
closeTransaction();
}
public void deleteSlide() {
startTransaction();
slide = (Slide)entityManager.find(Slide.class, id);
entityManager.remove(slide);
endTransaction();
closeTransaction();
slides.remove(slide);
ImageAction imageAtion = new ImageAction();
imageAtion.delete(slide.getImage().getUniqueName(), slide.getImage().getThumb());
}
public void makeEditable() {
editable = true;
}
public void startTransaction() {
entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();
}
public void endTransaction() {
entityManager.getTransaction().commit();
}
public void closeTransaction() {
entityManager.close();
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Slide getSlide() {
if( id != 0 ){
startTransaction();
slide = entityManager.find(Slide.class, id);
endTransaction();
closeTransaction();
}
return slide;
}
public void setSlide(Slide slide) {
this.slide = slide;
}
public UploadedFile getUploadedFile() {
return uploadedFile;
}
public void setUploadedFile(UploadedFile uploadedFile) {
this.uploadedFile = uploadedFile;
}
@SuppressWarnings("unchecked")
public List<Slide> getSlides() {
startTransaction();
slides = entityManager.createQuery("from Slide").getResultList();
System.out.println(">>>>>>>>>>>>>>>>>>SLIDES");
endTransaction();
closeTransaction();
return slides;
}
public void setSlides(List<Slide> slides) {
this.slides = slides;
}
public Integer[] getCoordinates() {
return coordinates;
}
public void setCoordinates(Integer[] coordinates) {
this.coordinates = coordinates;
}
public Image getImage() {
return image;
}
public void setImage(Image image) {
this.image = image;
}
public boolean isExternalLink() {
return externalLink;
}
public void setExternalLink(boolean externalLink) {
this.externalLink = externalLink;
}
@SuppressWarnings("unchecked")
public List<Slide> getPublicSlides() {
startTransaction();
publicSlides = entityManager.createQuery("from Slide where showOnFeed = true").getResultList();
return publicSlides;
}
public void setPublicSlides(List<Slide> publicSlides) {
this.publicSlides = publicSlides;
}
public boolean isEditable() {
return editable;
}
public void setEditable(boolean editable) {
this.editable = editable;
}
public int getPageId() {
return pageId;
}
public void setPageId(int pageId) {
this.pageId = pageId;
}
}
@Named
@请求范围
公共类幻灯片操作{
私有EntityManagerFactory EntityManagerFactory=Persistence.createEntityManagerFactory(“db”);
私人实体管理者实体管理者;
私有int-id;
私有int-pageId;
私有整数坐标[]=新整数[4];
私有图像;
私人幻灯片=新幻灯片();
私有列表幻灯片=新建ArrayList();
private List publicsslides=new ArrayList();
私有上传文件上传文件;
私有布尔外部链接=false;
私有布尔可编辑=真;
公共字符串add(){
返回“添加”;
}
公共字符串addSlide(){
ImageAction ImageAction=新建ImageAction();
上传(uploadedFile,false);
image=imageAction.getImage();
幻灯片。设置图像(图像);
幻灯片。设置裁剪(假);
startTransaction();
如果(!外部链接){
slide.setPage(entityManager.find(Page.class,pageId));
}
entityManager.persist(图像);
entityManager.persist(幻灯片);
endTransaction();
closeTransaction();
setId(slide.getId());
返回“详细信息”;
}
公共幻灯片(){
系统输出打印项次(幻灯片);
startTransaction();
entityManager.merge(幻灯片);
endTransaction();
closeTransaction();
}
公共幻灯片(){
startTransaction();
slide=(slide)entityManager.find(slide.class,id);
实体管理器。移除(滑动);
endTransaction();
closeTransaction();
幻灯片。移除(幻灯片);
ImageAction imageAtion=新ImageAction();
delete(slide.getImage().getUniqueName(),slide.getImage().getHumb());
}
公共void makeEditable(){
可编辑=真;
}
公共无效开始交易(){
entityManager=entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();
}
公开作废endTransaction(){
entityManager.getTransaction().commit();
}
公共事务(){
entityManager.close();
}
公共int getId(){
返回id;
}
公共无效集合id(内部id){
this.id=id;
}
公共幻灯片getSlide(){
如果(id!=0){
startTransaction();
slide=entityManager.find(slide.class,id);
endTransaction();
closeTransaction();
}
回程滑道;
}
公共空间设置滑梯(滑梯){
this.slide=幻灯片;
}
public UploadedFile getUploadedFile(){
返回上传的文件;
}
public void setUploadedFile(UploadedFile UploadedFile){
this.uploadedFile=uploadedFile;
}
@抑制警告(“未选中”)
公共列表getSlides(){
startTransaction();
slides=entityManager.createQuery(“来自幻灯片”).getResultList();
System.out.println(“>>>>>>>>>>>>>>幻灯片”);
endTransaction();
closeTransaction();
返回幻灯片;
}
公共幻灯片(列表幻灯片){
this.slides=幻灯片;
}
公共整数[]getCoordinates(){
返回坐标;
}
公共void集合坐标(整数[]坐标){
这个。坐标=坐标;
}
公共映像getImage(){
返回图像;
}
公共void setImage(图像){
这个图像=图像;
}
公共布尔值IsExternalink(){
返回外部墨水;
}
公共void setExternalLink(布尔值externalLink){
this.externalLink=externalLink;
}
@抑制警告(“未选中”)
公共列表getPublicSlides(){
startTransaction();
publicSlides=entityManager.createQuery(“来自showOnFeed=true的幻灯片”).getResultList();
返回幻灯片;
}
public void setPublicSlides(列出publicSlides){
this.publicsslides=publicsslides;
}
公共布尔值可编辑(){
返回可编辑;
}
公共void setEditable(布尔可编辑){
this.editable=可编辑;
}
public int getPageId(){
返回pageId;
}
公共无效setPageId(int-pageId){
this.pageId=pageId;
}
}
编辑页面:
<html>
<!-- DOCTYPE specification -->
<f:metadata>
<f:viewParam name="id" value="#{sliderAction.id}"/>
</f:metadata>
<ui:composition template="/view/private/administration/administrator.xhtml">
<ui:define name="title">#{msgs.addingSlide}</ui:define>
<ui:define name="extra-head">
<h:outputStylesheet library="css" name="jquery.jcrop.min.css"/>
</ui:define>
<ui:define name="content">
<div class="grid_14">
<h4 class="page-heading"><h:outputText value="#{sliderAction.slide.title} #{msgs.details}" /></h4>
<div class="line clear"></div>
<h:panelGroup id="details">
<h:form id="edit-slide">
<h:panelGrid columns="2">
<h:outputText value="#{msgs.slideTitle}" styleClass="label"/>
<h:outputText value="#{sliderAction.slide.title}" rendered="#{not sliderAction.editable}"/>
<h:inputText id="title" value="#{sliderAction.slide.title}" required="true" rendered="#{sliderAction.editable}"/>
<p></p><h:message for="title" errorClass="error"/>
<h:outputText value="#{msgs.description}" styleClass="label"/>
<h:outputText value="#{sliderAction.edidSlide.description}" rendered="#{not sliderAction.editable}"/>
<h:inputTextarea id="description" value="#{sliderAction.slide.description}" required="true" rendered="#{sliderAction.editable}"/>
<p></p><h:message for="description" errorClass="error"/>
<h:outputText value="#{msgs.page}" styleClass="label" />
<h:link outcome="notset" rendered="#{not sliderAction.editable}">
<h:outputText value="#{sliderAction.slide.page.heading}"/>
<f:param name="id" value="#{sliderAction.slide.page.id}" />
</h:link>
<h:selectOneMenu id="page" value="#{sliderAction.pageId}" required="true" rendered="#{sliderAction.editable}">
<f:selectItems value="#{pageAction.pages}" var="page" itemLabel="#{page.heading}" itemValue="#{page.id}"/>
</h:selectOneMenu>
<p></p><h:message for="page" errorClass="error"/>
<p></p>
<h:commandButton action="#{sliderAction.makeEditable}" value="#{msgs.edit}" styleClass="button" rendered="#{not sliderAction.editable}">
<f:ajax render="@form" execute="@this" />
</h:commandButton>
<h:commandButton action="#{sliderAction.editSlide}" value="#{msgs.saveChanges}" styleClass="button" rendered="#{sliderAction.editable}">
<f:ajax render="@form" execute="@form" />
</h:commandButton>
<h:message for="edit-slide"/>
</h:panelGrid>
</h:form>
</h:panelGroup>
</div>
</ui:define>
#{msgs.addingSlide}
public String getSlide() {
if(slide == null)
slide = getFromDB();
return slide;
}