【发布时间】:2018-06-25 03:33:45
【问题描述】:
我正在尝试使用 s:fileUpload 组件,这会导致设置 bean 变量时出现问题。它总是返回 null。这是xhtml:
<h:form enctype="multipart/form-data">
<s:fileUpload id="pictureproc" data="#{uploader.file}" />
<h:commandButton id="doanything"
action="#{uploader.filehash(pictureproc)}"
value="Show file hash" />
</h:form>
还有豆子:
@Name("uploader")
@Scope(ScopeType.SESSION)
public class Uploader {
byte[] file;
public byte[] getFile() {
return file;
}
public void setFile(byte[] file) {
this.file = file;
System.out.println("uploaded");
}
public void filehash(byte[] file) {
System.out.println(file.hashCode()); // here goes the NPE
}
}
我已经在 web.xml 和 components.xml 中包含了所有内容:
<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>
和组件:
<web:multipart-filter create-temp-files="true"
max-request-size="10485760" url-pattern="*.seam" />
<component class="org.jboss.seam.web.MultipartFilter">
<property name="createTempFiles">true</property>
<property name="maxRequestSize">1000000</property>
</component>
并记录:
引起:javax.faces.el.EvaluationException: java.lang.NullPointerException 在 javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102) 在 com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102) ... 54 更多 引起:java.lang.NullPointerException 在 com.example.Uploader.filehash(Filter.java:57)
我也尝试在 setter 中直接记录它,但它也返回 NULL。 接缝 2.2,JSF 1.0
【问题讨论】:
-
它为空,因为它没有被提交(与命令按钮的形式不同)
-
我把它移到了同一个表单中,它什么也没做,也不调用 setter。页面重新加载后表单组件消失,现在如果我再次单击它会像以前一样抛出 NPE。