JSF/Prime(文件上传组件)多部分表单不';t加载托管bean类参数

JSF/Prime(文件上传组件)多部分表单不';t加载托管bean类参数,jsf,primefaces,Jsf,Primefaces,我正在使用运行在GlassFifh3.1上的NB7.2.1开发JSF/Primefaces 3.4 web应用程序。因此,在提交多部分表单enctype时,“FileUploadListener”触发的事件不允许加载另一个类属性(如其他JSF inputText中的name或age)。为什么? 以下是视图: <h:form enctype="multipart/form-data"> <p:outputLabel value="Nome" for="nome" /&

我正在使用运行在GlassFifh3.1上的NB7.2.1开发JSF/Primefaces 3.4 web应用程序。因此,在提交多部分表单enctype时,“FileUploadListener”触发的事件不允许加载另一个类属性(如其他JSF inputText中的name或age)。为什么?

以下是视图:

  <h:form enctype="multipart/form-data">
    <p:outputLabel value="Nome" for="nome" />
    <p:inputText value="#{controller.nome}" id="nome" />
    <br />
    <p:fileUpload mode="advanced" multiple="true" fileUploadListener="#{controller.doSubmit}" />
  </h:form>
在上一个“getName()”调用中,返回了null。因此,一切都是一样的。为什么我可以检索event.getFile()而不检索getNome()?

上传按钮不会提交整个表单。它将只上载文件。
为了提交整个表单,您需要一个普通的提交按钮

在file upload listener方法中,您只需将文件作为变量保存在视图范围bean中,以便在与普通submit按钮关联的操作方法中对其执行必要的业务逻辑,以及所有其他输入值

例如



@ManagedBean
@视域
公共类控制器{
私有字符串名称;
private List files;//您需要什么来获取所有文件。
@施工后
公共void init(){
files=newarraylist();
}
public void handleUpload(FileUploadEvent事件){
File File=save(event.getUploadedFile());//尽你所能保存它。
文件。添加(文件);
}
公共无效doSubmit(){
//听着,你来做生意。
System.out.println(“输入名称:“+nome”);
System.out.println(“保存的文件:+文件”);
}
// ...
}
“上传”按钮不会提交整个表单。它将只上载文件。
为了提交整个表单,您需要一个普通的提交按钮

在file upload listener方法中,您只需将文件作为变量保存在视图范围bean中,以便在与普通submit按钮关联的操作方法中对其执行必要的业务逻辑,以及所有其他输入值

例如



@ManagedBean
@视域
公共类控制器{
私有字符串名称;
private List files;//您需要什么来获取所有文件。
@施工后
公共void init(){
files=newarraylist();
}
public void handleUpload(FileUploadEvent事件){
File File=save(event.getUploadedFile());//尽你所能保存它。
文件。添加(文件);
}
公共无效doSubmit(){
//听着,你来做生意。
System.out.println(“输入名称:“+nome”);
System.out.println(“保存的文件:+文件”);
}
// ...
}

通过使用PrimeFaces fileupload元素的process属性,我能够解决类似的情况。我在表格中列出了文件上传后我想“提交”的所有组件,没有单独的按钮,只有三个。请注意,此解决方案在上载文件后,按照列出的顺序“提交”process中列出的组件值。类似地,我使用update属性在文件上传完成后更新组件。在本例中,添加process=“name”,它应该执行您需要的操作

  <h:form enctype="multipart/form-data">
    <p:outputLabel value="Name" for="name" />
    <p:inputText value="#{controller.name}" id="name" />
    <br />
    <p:fileUpload process="name" mode="advanced" multiple="true" fileUploadListener="#{controller.handleUpload}" />
  </h:form>


您的托管bean将类似于:

    @ManagedBean
    @ViewScoped
    public class Controller {

        private String name;
        private List<File> files; // Whatever you need to get hold of all files.

        @PostConstruct
        public void init() {
            files = new ArrayList<File>();
        }

        public void handleUpload(FileUploadEvent event) {
            File file = save(event.getUploadedFile()); // Do your thing to save it.
            files.add(file);
        }

        public void setName(String name) {
            this.name = name;

            if(!files.isEmpty()) {
               // ... do something with name and files ...
            }
        }
   }
@ManagedBean
@视域
公共类控制器{
私有字符串名称;
private List files;//您需要什么来获取所有文件。
@施工后
公共void init(){
files=newarraylist();
}
public void handleUpload(FileUploadEvent事件){
File File=save(event.getUploadedFile());//尽你所能保存它。
文件。添加(文件);
}
公共void集合名(字符串名){
this.name=名称;
如果(!files.isEmpty()){
//…对名称和文件执行某些操作。。。
}
}
}

通过使用PrimeFaces fileupload元素的process属性,我能够解决类似的情况。我在表格中列出了文件上传后我想“提交”的所有组件,没有单独的按钮,只有三个。请注意,此解决方案在上载文件后,按照列出的顺序“提交”process中列出的组件值。类似地,我使用update属性在文件上传完成后更新组件。在本例中,添加process=“name”,它应该执行您需要的操作

  <h:form enctype="multipart/form-data">
    <p:outputLabel value="Name" for="name" />
    <p:inputText value="#{controller.name}" id="name" />
    <br />
    <p:fileUpload process="name" mode="advanced" multiple="true" fileUploadListener="#{controller.handleUpload}" />
  </h:form>


您的托管bean将类似于:

    @ManagedBean
    @ViewScoped
    public class Controller {

        private String name;
        private List<File> files; // Whatever you need to get hold of all files.

        @PostConstruct
        public void init() {
            files = new ArrayList<File>();
        }

        public void handleUpload(FileUploadEvent event) {
            File file = save(event.getUploadedFile()); // Do your thing to save it.
            files.add(file);
        }

        public void setName(String name) {
            this.name = name;

            if(!files.isEmpty()) {
               // ... do something with name and files ...
            }
        }
   }
@ManagedBean
@视域
公共类控制器{
私有字符串名称;
private List files;//您需要什么来获取所有文件。
@施工后
公共void init(){
files=newarraylist();
}
public void handleUpload(FileUploadEvent事件){
File File=save(event.getUploadedFile());//尽你所能保存它。
文件。添加(文件);
}
公共void集合名(字符串名){
this.name=名称;
如果(!files.isEmpty()){
//…对名称和文件执行某些操作。。。
}
}
}

我能够使用partialSubmit=“true”过程解决类似情况。 partialSubmit部分处理的组件到ajax请求post

<h:outputLabel for="saType" value="Sa Type"/>
                <p:selectOneMenu id="saType" required="true" value="#{saUploadController.saDetails.listType}">
                    <p:ajax event="change" partialSubmit="true"/>
                    <f:selectItem itemLabel="--select Type--"  itemValue=""/>
                    <f:selectItems value="#{saUploadController.saTypes}"/>
                </p:selectOneMenu>
                <h:outputLabel value="*select a file :"/> 
                <p:fileUpload id="uploadedFile1" value="#{saUploadController.uploadedFile}" mode="advanced" fileUploadListener="#{saUploadController.handleFileUpload}" allowTypes="/(\.|\/)(xml)$/" update="add:msgsAdd add:saType" process="saType"/>                      
                <p:message for="uploadedFile1" display="icon"/>

使用
我们可以部分提交下拉列表值,通过
process=“saType”
它将获得handleFileUpload方法的下拉列表项值
<h:outputLabel for="saType" value="Sa Type"/>
                <p:selectOneMenu id="saType" required="true" value="#{saUploadController.saDetails.listType}">
                    <p:ajax event="change" partialSubmit="true"/>
                    <f:selectItem itemLabel="--select Type--"  itemValue=""/>
                    <f:selectItems value="#{saUploadController.saTypes}"/>
                </p:selectOneMenu>
                <h:outputLabel value="*select a file :"/> 
                <p:fileUpload id="uploadedFile1" value="#{saUploadController.uploadedFile}" mode="advanced" fileUploadListener="#{saUploadController.handleFileUpload}" allowTypes="/(\.|\/)(xml)$/" update="add:msgsAdd add:saType" process="saType"/>                      
                <p:message for="uploadedFile1" display="icon"/>