Мы разработали форму и поля, используя поддерживающий боб. Используемая загрузка не будет работать, загрузка страницы останавливается после 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>
Код в бобе:
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-компонентов с необходимыми функциями получения и установки.
Ошибка происходит где-то в XPages, а не в моем коде. Если я закомментирую элемент управления загрузкой, все остальное работает. Может кто-нибудь пролить свет на то, почему я всегда получаю исключение нулевого указателя? Спасибо !!
EDIT добавлены некоторые уточнения, особенно тот факт, что ошибка возникает после шага afterRenderResponse. Я печатаю простую трассировку всех событий в каждом настраиваемом элементе управления, и нет никакой разницы в трассировке, когда я использую элемент управления загрузки или нет, они идентичны, включая последнее событие afterRenderresponse.