fileUpload - problem updating model
grundor Mar 27, 2008 10:14 PMI am attempting to create a simple form in my application that allows the user to upload an image and store it in the database.
When the form is submitted after the image is selected I am getting the following exception:
16:26:23,936 WARN [lifecycle] executePhase(UPDATE_MODEL_VALUES 4,com.sun.faces.context.FacesContextImpl@32ba35) threw exception
javax.el.PropertyNotFoundException: /super/SkinEdit.xhtml @18,24 data="#{skinHome.instance.skinBanner}": Property 'skinBanner' not writable on type [B
at com.sun.facelets.el.TagValueExpression.setValue(TagValueExpression.java:95)
at org.jboss.seam.ui.component.UIFileUpload.processUpdates(UIFileUpload.java:60)
at javax.faces.component.UIForm.processUpdates(UIForm.java:255)
at javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1056)
at javax.faces.component.UIViewRoot.processUpdates(UIViewRoot.java:706)
at org.ajax4jsf.component.AjaxViewRoot.access$101(AjaxViewRoot.java:57)
at org.ajax4jsf.component.AjaxViewRoot$2.invokeRoot(AjaxViewRoot.java:291)
at org.ajax4jsf.context.JsfOneOneInvoker.invokeOnRegionOrRoot(JsfOneOneInvoker.java:56)
at org.ajax4jsf.context.AjaxContextImpl.invokeOnRegionOrRoot(AjaxContextImpl.java:170)
at org.ajax4jsf.component.AjaxViewRoot.processUpdates(AjaxViewRoot.java:305)
at com.sun.faces.lifecycle.UpdateModelValuesPhase.execute(UpdateModelValuesPhase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83)
at org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:80)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:141)
at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:281)
at org.jboss.seam.web.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:60)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:58)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.debug.hot.HotDeployFilter.doFilter(HotDeployFilter.java:68)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:432)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
at java.lang.Thread.run(Unknown Source)Here is my entity:
@Entity
@Table(name = "skin", catalog = "ludb")
public class Skin implements java.io.Serializable {
private static final long serialVersionUID = -9025450505108960382L;
private Integer skinId;
private String skinName;
private byte[] skinBanner;
private String skinBannerType;
public Skin() {
}
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "SKIN_ID", unique = true, nullable = false)
public Integer getSkinId() {
return this.skinId;
}
public void setSkinId(Integer skinId) {
this.skinId = skinId;
}
@Column(name = "SKIN_NAME", nullable = false, length = 40)
@NotNull
@Length(max = 40)
public String getSkinName() {
return this.skinName;
}
public void setSkinName(String skinName) {
this.skinName = skinName;
}
@Lob
@Column(name = "SKIN_BANNER")
@Basic(fetch = FetchType.LAZY)
public byte[] getSkinBanner() {
return this.skinBanner;
}
void setSkinBanner(byte[] skinBanner) {
this.skinBanner = skinBanner;
}
@Transient
public String getSkinBannerType() {
return skinBannerType;
}
public void setSkinBannerType(String type) {
this.skinBannerType= type;
}
}Here is my form page:
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:s="http://jboss.com/products/seam/taglib"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:a="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich"
template="layout/template.xhtml">
<ui:define name="body">
<h:form id="skin" enctype="multipart/form-data" styleClass="edit">
<s:fileUpload id="bannerImg"
data="#{skinHome.instance.skinBanner}"
contentType="#{skinHome.instance.skinBannerType}"
accept="image/*" />
<h:commandButton id="update"
value="Save"
action="#{skinHome.update}"
rendered="#{skinHome.managed}"/>
</h:form>
</ui:define>
I have setup my components.xml with:
<component class="org.jboss.seam.web.MultipartFilter"> <property name="createTempFiles">true</property> <property name="maxRequestSize">4194304</property> </component>
and my web.xml with:
<filter> <filter-name>Seam Filter</filter-name> <filter-class>org.jboss.seam.servlet.SeamFilter</filter-class> </filter> <filter-mapping> <filter-name>Seam Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
Can anyone spot why my model can't be updated properly?
Much appreciated.