代码之家  ›  专栏  ›  技术社区  ›  D.Bugger

xpages:如何使用带有bean的fileupload控件作为后端?

  •  1
  • D.Bugger  · 技术社区  · 6 年前

    我们使用支持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事件。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Frantisek Kossuth    6 年前
    /* 370 */     Object localObject1 = getForm(paramUIComponent);
    /* 371 */     String str3 = ((UIForm)localObject1).getClientId(paramFacesContext);
    

    JD-Eclipse 是非常有用的工具,与domino设计器一起工作。与Java完美结合 debugging ,包括断点。

    要定位类,请使用以下提示: Assistance locating jar containing Domino/XPages classes

    我的猜测是:文件上传控件没有引用表单。可能组件在窗体外部,或者窗体呈现被禁用。