首页 > 解决方案 > XPages:如何使用带有 bean 作为后端的 fileUpload 控件?

问题描述

我们使用支持 bean 开发了一个表单和字段。由于某种原因,使用的上传不起作用,加载页面在 afterRenderResponse之后停止:

<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>

我有 bean 表单和字段,以及必要的 getter 和 setter 函数。

该错误发生在 XPages 中的某处,而不是我的代码中。如果我将上传控件注释掉,其他一切都正常。有人可以解释一下为什么我总是得到空指针异常吗?谢谢!!

编辑添加了一些说明,尤其是在 afterRenderResponse 步骤之后发生错误的事实。我打印了每个自定义控件中所有事件的简单跟踪,当我使用上传控件时,跟踪没有区别,它们是相同的,包括最后一个 afterRenderresponse 事件。

标签: file-uploadxpagesjavabeans

解决方案


/* 370 */     Object localObject1 = getForm(paramUIComponent);
/* 371 */     String str3 = ((UIForm)localObject1).getClientId(paramFacesContext);

JD-Eclipse是非常有用的工具,可与 Domino Designer 配合使用。完美配合 Java调试,包括断点。

要定位该类,请使用以下提示:Assistant locating jar contains Domino/XPages classes

我的猜测:文件上传控件缺少对表单的引用。可能组件在表单之外,或者表单呈现被禁用。


推荐阅读