Интеграция между атрибутом композитного компонента и сервлетом в JSF - PullRequest
0 голосов
/ 25 марта 2012

Я пытаюсь интегрировать Plupload с JSF максимально независимым способом, для этого я создал составной компонент.

Чтобы использовать Plupload на моей странице JSF, я просто вызываю:

<comp:plupload ... value=#{MyBean.files} />

Где MyBean.files - список.

Когда я добавляю файлы в компонент Plupload и нажимаюКнопка «Начать загрузку» Я хочу, чтобы он загрузил все во временную папку и заполнил объект, указанный в «значении» моего составного компонента, этими свойствами файлов (например, путем).

Для загрузки файлов яЯ использую сервлет, он не имеет ничего общего с JSF, он отлично работает для первой части: он загружает все во временную папку.Моя проблема - вторая часть, я провел много исследований, но не могу найти способ передать атрибут «значение» в моем составном компоненте JSF моему сервлету.

Plupload использует javascript для настройки всегозапрос будет отправлен по URL-адресу, указанному в атрибуте "url" в следующем коде:

<composite:interface>
  ...
  <composite:attribute name="value" required="true" />
</composite:interface>
<composite:implementation>
  ...
  <script type="text/javascript">
    // Convert divs to queue widgets when the DOM is ready
    $(function() {
      $("#uploader").pluploadQueue({
        // General settings
        runtimes : '#{cc.attrs.runtimePreferences}',
        url : '/plupload',
        max_file_size : '#{cc.attrs.maxFileSize}',
        ...
      });
    });
  </script>

  <div id="uploader">
    <p><h:outputText value="Your browser does not support this." /></p>
  </div>
</composite:implementation>

Я указал "/ plupload" в качестве URL-адреса, это URL моего сервлета (в web.xml).

Я могу подумать о двух возможных решениях:

  1. Продолжить использовать этот сервлет, который полностью независим от FacesServlet, и найти способ передать атрибут "значение" вмой составной компонент в качестве атрибута запроса для моего сервлета.Но как я могу это сделать?

  2. Прекратить использовать новый сервлет, я не должен этого делать, поскольку я использую JSF, все должно обрабатываться FacesServlet.Вместо того, чтобы использовать новый сервлет, я мог бы создать ManagedBean.Внутри этого управляемого элемента я мог создать метод и восстановить HttpRequest и HttpResponse.Проще связать мой CompositeComponent с методом, который обрабатывает загрузку, если это управляемый компонент.Проблема: Как я могу ссылаться на метод managedBean через URL?Я все еще должен заполнить атрибут «URL» в коде JavaScript.Есть ли что-то вроде "/ face / MyBean? Action = 'myMethod ()'?

Заранее спасибо за любой ответ;)

1 Ответ

0 голосов
/ 25 марта 2012

Отправьте его как pathinfo запроса.

url: '/plupload/' + encodeURIComponent('#{cc.attrs.value}'), // You might want to escape JS special characters like singlequotes, newlines, etc as well, depending on what the value can contain.

Если сервлет отображается на /plupload/*, вы можете получить его следующим образом:

String value = request.getPathInfo().substring(1);
...