Avoiding {or electing} to update a specific field in EntityHome
drlow Jul 27, 2009 6:09 PMI have used seam-gen to create a basic application, and modified it to allow the upload of images into the database.
This works for both insert and update as expected. Howeverm functionally if no replacement image is provided, the the EntityHome updates the field to 0 length. I understand why, but I am struggling to find a way to amend the UDPATE query to avoid this.
Can anyone suggest how to do this? I was looking to override update in the entityhome, but I don't understand how to stop a field being updated
Thanks in advance.
<s:decorate id="photoField" template="/admin/layout/edit.xhtml"> <ui:define name="label">Photo</ui:define> <s:fileUpload id="file" data="#{boardHome.instance.photo}" contentType="#{boardHome.instance.photoContentType}" fileName="#{boardHome.instance.photoFileName}" fileSize="#{boardHome.instance.photoSize}" /> </s:decorate> <s:decorate id="photoContentTypeField" template="/admin/layout/edit.xhtml" rendered="#{not empty boardHome.instance.photoContentType}"> <ui:define name="label">photoContentType</ui:define> <h:outputText id="photoContentType" size="20" maxlength="20" value="#{boardHome.instance.photoContentType}"> <a:support event="onblur" reRender="photoContentTypeField" bypassUpdates="true" ajaxSingle="true"/> </h:outputText> </s:decorate>
and the Class
@Entity public class Board implements Serializable { private static Calendar birth; private static Calendar today; static { birth = new GregorianCalendar(); today = new GregorianCalendar(); } @Id @GeneratedValue private Long id; @Length(max = 100) private String fullName; @Length(max = 100) private String jobTitle; @Column(nullable=false) @Temporal(TemporalType.DATE) private Date dateOfBirth; @Lob private String biography; @Column(name = "photo_data") @Lob private byte[] photo; @Column(name = "photo_content_type") private String photoContentType; @Column(name = "photo_size") private long photoSize; @Column(name= "phto_filename") private String photoFileName; @Column(name="ordering") private Integer order; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getFullName() { return fullName; } public void setFullName(String fullName) { this.fullName = fullName; } public String getJobTitle() { return jobTitle; } public void setJobTitle(String jobTitle) { this.jobTitle = jobTitle; } public Date getDateOfBirth() { return dateOfBirth; } public void setDateOfBirth(Date dateOfBirth) { this.dateOfBirth = dateOfBirth; } public String getBiography() { return biography; } public void setBiography(String biography) { this.biography = biography; } public byte[] getPhoto() { return photo; } public void setPhoto(byte[] photo) { this.photo = photo; } public String getPhotoContentType() { return photoContentType; } public void setPhotoContentType(String photoContentType) { this.photoContentType = photoContentType; } public long getPhotoSize() { return this.photoSize; } public void setPhotoSize(long photoSize) { this.photoSize = photoSize; } public String getPhotoFileName() { return photoFileName; } public void setPhotoFileName(String photoFileName) { this.photoFileName = photoFileName; } public Integer getOrder() { return order; } public void setOrder(Integer order) { this.order = order; } @Transient public int getAge() { //to correctly calculate age when birthday has not been yet celebrated int factor = 0; birth.setTime(dateOfBirth); today.setTime(new Date()); // check if birthday has been celebrated this year if(today.get(Calendar.DAY_OF_YEAR) < birth.get(Calendar.DAY_OF_YEAR)) { //birthday not celebrated factor = -1; } return today.get(Calendar.YEAR) - birth.get(Calendar.YEAR) + factor; } }
Apologies - I am very new to SEAM (3 days into my first application) and 1/2 way though the SiA book (which is highlyrecommended).