Несколько загрузок файлов - JSF - PullRequest
0 голосов
/ 02 мая 2011

Я использую каркас JSF 1.2.Прямо сейчас я пытаюсь реализовать процесс загрузки файлов, в котором количество загружаемых файлов контролируется конечным пользователем.Пожалуйста, найдите приведенный ниже снимок и фрагмент кода для справки.

Multiple File Upload

Реализация XHTML: -

<a4j:commandLink action="#{importWSDLBean.xsdLoopIncrementAction}" reRender="WSDLPanelGrid">
 <h:graphicImage value="/images/plus_icon.gif" />
</a4j:commandLink>

<a4j:commandLink action="#{importWSDLBean.xsdLoopDecrementAction}" reRender="WSDLPanelGrid">
 <h:graphicImage value="/images/minus_icon.gif" />
</a4j:commandLink>

<h:panelGrid id="WSDLPanelGrid">
 <c:forEach items="#{importWSDLBean.acscDataList}" var="inputFUpload">
  <t:inputFileUpload id="#{inputFUpload.id}" value="#{inputFUpload.value}" />
 </c:forEach>
</h:panelGrid>

Java BeanРеализация: -

public String xsdLoopIncrementAction() {
    if (acscDataList == null) {
        acscDataList = new ACSCDataList(new ArrayList());
        HtmlInputFileUpload htmlUpload = new HtmlInputFileUpload();
        htmlUpload.setId("upload" + (acscDataList.size() + 1));
        acscDataList.add(htmlUpload);
    } else {
        HtmlInputFileUpload htmlUpload = new HtmlInputFileUpload();
        htmlUpload.setId("upload" + (acscDataList.size() + 1));
        acscDataList.add(htmlUpload);
    }
    return "success";
}


public String xsdLoopDecrementAction() {
    if (acscDataList != null) {
        if (acscDataList.size() > 0) {
            acscDataList.remove(acscDataList.size() - 1);
        }
    }
    return "success";
}

Эта реализация сбрасывает значения загрузки файла всякий раз, когда я увеличиваю или уменьшаю значение no.полей загрузки файла.Также, когда я отправляю форму, я не могу получить объект UploadedFile (обязательное условие загрузки файла, такое как тип формы и конфигурация Web.xml, также включено).

Может ли кто-нибудь мне помочь?

Ответы [ 2 ]

1 голос
/ 03 мая 2011

Если вы создаете динамически ваши входные загрузки?с обязательным свойством

<h:panelGrid binding="#{importWSDLBean.myPanelGrid}"></h:panelGrid>

в вашем бобе добавить свойство

private javax.faces.component.html.HtmlPanelGrid myPanelGrid;
/**
 * @return the myPanelGrid
 */
public javax.faces.component.html.HtmlPanelGrid getMyPanelGrid() {
    return myPanelGrid;
}



/**
 * @param myPanelGrid the myPanelGrid to set
 */
public void setMyPanelGrid(javax.faces.component.html.HtmlPanelGrid myPanelGrid) {
    this.myPanelGrid = myPanelGrid;
}
/*change for your value upload type*/
Map<String,Object> values = new LinkedHashMap<String, Object>();
public void addInputAction() {



    String key = "key"+values.size();
            values.put(key,"newValue");

    HtmlInputText input = new HtmlInputText();
 /*add input property (converter,css,etc?)*/
    input.setId("id_"+key);

    input.setValueExpression("value", createValueExpression(
            "#{WSDLPanelGrid.values['"+key+"']}", new Class[0], String.class));
/*add to panel grid your input*/
    myPanelGrid.getChildren().add(input);
}

  public static ValueExpression createValueExpression(String value,
        Class[] params, Class returnType) {
    FacesContext fctx = FacesContext.getCurrentInstance();
    ELContext elctx = fctx.getELContext();
    Application jsfApp = fctx.getApplication();
    ExpressionFactory exprFactory = jsfApp.getExpressionFactory();

    ValueExpression valueExpr = exprFactory.createValueExpression(elctx,
            value, returnType);

    return valueExpr;

}
0 голосов
/ 02 мая 2011

Что-то мешает вам использовать JSF 2? Primefaces (www.primefaces.org) имеет несколько файловых компонентов загрузки. Он доступен для JSF 1.2, но разработка будет продолжаться только для JSF 2.

...