XPages:如何使用带有 bean 的 fileUpload 控件作为后端?
XPages: how to use a fileUpload control with a bean as back-end?
我们使用支持 bean 开发了一个表单和字段。使用的上传不起作用,加载页面停止 afterafterRenderResponse,出于某种原因:
<xp:fileUpload value="#{field.fileUpload}" id="fileUpload1">
<xp:this.attrs>
<xp:attr name="alias" value="#{form.name}.#{field.fieldName}"></xp:attr>
</xp:this.attrs>
</xp:fileUpload>
bean中的代码:
private UploadedFile uploadedFile= null;
public FieldData(Field field) {
this.field = field;
this.value = field.getFieldValue();
System.err.print("new FieldData: " + field.getFieldName());
}
public UploadedFile getFileUpload() {
System.err.print("getFileUpload");
return uploadedFile;
}
public void setFileUpload(UploadedFile to) {
System.err.print("setFileUpload " + to);
this.uploadedFile = to;
}
我不断收到的错误:
java.lang.NullPointerException
at com.ibm.xsp.renderkit.html_extended.FileuploadRendererEx.encodeEnd(FileuploadRendererEx.java:371)
at com.ibm.xsp.renderkit.ReadOnlyAdapterRenderer.encodeEnd(ReadOnlyAdapterRenderer.java:180)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:1005)
at com.ibm.xsp.util.FacesUtil.renderComponent(FacesUtil.java:857)
还有更多行。
其他类型的字段表现良好,除了这个。举个例子,文本字段定义为:
<xp:inputText type="text" value="#{field.fieldValue}" id="inputText1">
<xp:this.attrs>
<xp:attr name="required" value="true" rendered="#{javascript:field.isRequired()}"></xp:attr>
<xp:attr name="alias" value="#{form.name}.#{field.fieldName}"></xp:attr>
</xp:this.attrs>
</xp:inputText>
我有 beans 表单和字段,具有必要的 getter 和 setter 功能。
错误发生在 XPages 的某处,而不是在我的代码中。如果我将上传控件注释掉,其他一切都有效。有人能解释一下为什么我总是得到空指针异常吗?谢谢!!
EDIT 添加了一些说明,尤其是错误发生在 afterRenderResponse 步骤之后。我打印了每个自定义控件中所有事件的简单跟踪,无论是否使用上传控件,跟踪都没有区别,它们是相同的,包括最后一个 afterRenderresponse 事件。
/* 370 */ Object localObject1 = getForm(paramUIComponent);
/* 371 */ String str3 = ((UIForm)localObject1).getClientId(paramFacesContext);
JD-Eclipse is very useful tool, works with Domino Designer. Works perfectly with Java debugging,包括断点。
要找到 class,请使用此提示:
我的猜测:文件上传控件缺少对表单的引用。可能组件在窗体之外,或者窗体渲染被禁用。
我们使用支持 bean 开发了一个表单和字段。使用的上传不起作用,加载页面停止 afterafterRenderResponse,出于某种原因:
<xp:fileUpload value="#{field.fileUpload}" id="fileUpload1">
<xp:this.attrs>
<xp:attr name="alias" value="#{form.name}.#{field.fieldName}"></xp:attr>
</xp:this.attrs>
</xp:fileUpload>
bean中的代码:
private UploadedFile uploadedFile= null;
public FieldData(Field field) {
this.field = field;
this.value = field.getFieldValue();
System.err.print("new FieldData: " + field.getFieldName());
}
public UploadedFile getFileUpload() {
System.err.print("getFileUpload");
return uploadedFile;
}
public void setFileUpload(UploadedFile to) {
System.err.print("setFileUpload " + to);
this.uploadedFile = to;
}
我不断收到的错误:
java.lang.NullPointerException
at com.ibm.xsp.renderkit.html_extended.FileuploadRendererEx.encodeEnd(FileuploadRendererEx.java:371)
at com.ibm.xsp.renderkit.ReadOnlyAdapterRenderer.encodeEnd(ReadOnlyAdapterRenderer.java:180)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:1005)
at com.ibm.xsp.util.FacesUtil.renderComponent(FacesUtil.java:857)
还有更多行。
其他类型的字段表现良好,除了这个。举个例子,文本字段定义为:
<xp:inputText type="text" value="#{field.fieldValue}" id="inputText1">
<xp:this.attrs>
<xp:attr name="required" value="true" rendered="#{javascript:field.isRequired()}"></xp:attr>
<xp:attr name="alias" value="#{form.name}.#{field.fieldName}"></xp:attr>
</xp:this.attrs>
</xp:inputText>
我有 beans 表单和字段,具有必要的 getter 和 setter 功能。
错误发生在 XPages 的某处,而不是在我的代码中。如果我将上传控件注释掉,其他一切都有效。有人能解释一下为什么我总是得到空指针异常吗?谢谢!!
EDIT 添加了一些说明,尤其是错误发生在 afterRenderResponse 步骤之后。我打印了每个自定义控件中所有事件的简单跟踪,无论是否使用上传控件,跟踪都没有区别,它们是相同的,包括最后一个 afterRenderresponse 事件。
/* 370 */ Object localObject1 = getForm(paramUIComponent);
/* 371 */ String str3 = ((UIForm)localObject1).getClientId(paramFacesContext);
JD-Eclipse is very useful tool, works with Domino Designer. Works perfectly with Java debugging,包括断点。
要找到 class,请使用此提示:
我的猜测:文件上传控件缺少对表单的引用。可能组件在窗体之外,或者窗体渲染被禁用。