ADF af:inputFile 不使用 valueChangeListener 触发 ValueChangeEvent
ADF af:inputFile does not trigger ValueChangeEvent with valueChangeListener
我尝试将 RichInputFile 与 viewScopeBean 绑定失败。
这是我的代码:
jsff :
<af:panelGroupLayout id="pgl1" layout="horizontal">
<af:inputFile label="Upload File" id="if1"
binding="#{viewScope.userBean.inputFile}"
valueChangeListener="#{viewScope.userBean.onFileUploadValueChangeListener}"
autoSubmit="true"/>
<af:spacer width="10" height="10" id="s7"/>
<af:commandButton text="Upload" id="cb1"
disabled="#{viewScope.userBean.inputFile.value == null ? true : false}"
partialTriggers="if1"
actionListener="#{viewScope.userBean.onUploadFile}"/>
</af:panelGroupLayout>
豆子:
public class UserBean{
private RichInputFile inputFile;
private UploadedFile file;
private String fileContent;
private String fileName;
private InputStream inputstream;
public UserBean() {
super();
}
public void onFileUploadValueChangeListener(ValueChangeEvent valueChangeEvent) {
resetValue();
file = (UploadedFile)valueChangeEvent.getNewValue();
try {
inputstream = file.getInputStream();
} catch (IOException e) {
e.printStackTrace();
}
}
public void onUploadFile(ActionEvent actionEvent) {
if (file != null && inputstream != null) {
fileName = file.getFilename();
StringWriter writer = new StringWriter();
}
if (inputFile != null) {
inputFile.resetValue();
inputFile.setValid(true);
}
}
public void resetValue() {
if (fileName != null)
fileName = null;
if (fileContent != null)
fileContent = null;
if (inputstream != null)
inputstream = null;
}
public void setInputFile(RichInputFile inputFile) {
this.inputFile = inputFile;
}
public RichInputFile getInputFile() {
return inputFile;
}
public void setFile(UploadedFile file) {
this.file = file;
}
public UploadedFile getFile() {
return file;
}
public String getFileContent() {
return fileContent;
}
public String getFileName() {
return fileName;
}
}
当我 select 上传文件元素上的文件时,该文件被 selected 但不会触发 ValueChangeEvent 并且不会调用 onFileUploadValueChangeListener。 PPR 发生并且 RichInputFile inputFile 值仍然为空,在屏幕上显示 "No file selected"。 (绑定成功)
我应该更正什么才能在 af:inputFile 上触发 valueChangeEvent?
我找到答案了。
要触发 af:inputFile valueChangeEvent,必须用 af:form usesUpload="true" 标签包围它:
<af:panelGroupLayout id="pgl1" layout="horizontal">
<af:form usesUpload="true" id="f1">
<af:inputFile label="Upload File" id="if1"
binding="#{viewScope.userBean.inputFile}"
valueChangeListener="#{viewScope.userBean.onFileUploadValueChangeListener}"
autoSubmit="true"/>
<af:spacer width="10" height="10" id="s7"/>
<af:commandButton text="Upload" id="cb1"
disabled="#{viewScope.userBean.inputFile.value == null ? true : false}"
partialTriggers="if1"
actionListener="#{viewScope.userBean.onUploadFile}"/>
</af:form>
</af:panelGroupLayout>
如果我们在任务流区域上有一个表单并且 usesUpload="true" 它也有效吗??
是的。
如果您在任务流区域上有一个表单,您应该找到 usesUpload="true"
并将其添加到该表单。它将添加到 html: enctype="multipart/form-data"
允许您上传文件,并且将捕获 valueChangeListener。
我尝试将 RichInputFile 与 viewScopeBean 绑定失败。
这是我的代码:
jsff :
<af:panelGroupLayout id="pgl1" layout="horizontal">
<af:inputFile label="Upload File" id="if1"
binding="#{viewScope.userBean.inputFile}"
valueChangeListener="#{viewScope.userBean.onFileUploadValueChangeListener}"
autoSubmit="true"/>
<af:spacer width="10" height="10" id="s7"/>
<af:commandButton text="Upload" id="cb1"
disabled="#{viewScope.userBean.inputFile.value == null ? true : false}"
partialTriggers="if1"
actionListener="#{viewScope.userBean.onUploadFile}"/>
</af:panelGroupLayout>
豆子:
public class UserBean{
private RichInputFile inputFile;
private UploadedFile file;
private String fileContent;
private String fileName;
private InputStream inputstream;
public UserBean() {
super();
}
public void onFileUploadValueChangeListener(ValueChangeEvent valueChangeEvent) {
resetValue();
file = (UploadedFile)valueChangeEvent.getNewValue();
try {
inputstream = file.getInputStream();
} catch (IOException e) {
e.printStackTrace();
}
}
public void onUploadFile(ActionEvent actionEvent) {
if (file != null && inputstream != null) {
fileName = file.getFilename();
StringWriter writer = new StringWriter();
}
if (inputFile != null) {
inputFile.resetValue();
inputFile.setValid(true);
}
}
public void resetValue() {
if (fileName != null)
fileName = null;
if (fileContent != null)
fileContent = null;
if (inputstream != null)
inputstream = null;
}
public void setInputFile(RichInputFile inputFile) {
this.inputFile = inputFile;
}
public RichInputFile getInputFile() {
return inputFile;
}
public void setFile(UploadedFile file) {
this.file = file;
}
public UploadedFile getFile() {
return file;
}
public String getFileContent() {
return fileContent;
}
public String getFileName() {
return fileName;
}
}
当我 select 上传文件元素上的文件时,该文件被 selected 但不会触发 ValueChangeEvent 并且不会调用 onFileUploadValueChangeListener。 PPR 发生并且 RichInputFile inputFile 值仍然为空,在屏幕上显示 "No file selected"。 (绑定成功)
我应该更正什么才能在 af:inputFile 上触发 valueChangeEvent?
我找到答案了。
要触发 af:inputFile valueChangeEvent,必须用 af:form usesUpload="true" 标签包围它:
<af:panelGroupLayout id="pgl1" layout="horizontal">
<af:form usesUpload="true" id="f1">
<af:inputFile label="Upload File" id="if1"
binding="#{viewScope.userBean.inputFile}"
valueChangeListener="#{viewScope.userBean.onFileUploadValueChangeListener}"
autoSubmit="true"/>
<af:spacer width="10" height="10" id="s7"/>
<af:commandButton text="Upload" id="cb1"
disabled="#{viewScope.userBean.inputFile.value == null ? true : false}"
partialTriggers="if1"
actionListener="#{viewScope.userBean.onUploadFile}"/>
</af:form>
</af:panelGroupLayout>
如果我们在任务流区域上有一个表单并且 usesUpload="true" 它也有效吗??
是的。
如果您在任务流区域上有一个表单,您应该找到 usesUpload="true"
并将其添加到该表单。它将添加到 html: enctype="multipart/form-data"
允许您上传文件,并且将捕获 valueChangeListener。