JSF 2: outputLink, параметры которого зависят от ввода пользователя - PullRequest
1 голос
/ 12 августа 2010

Вот моя проблема: мне нужно создать (казалось бы) простой интерфейс для отчета.Пользователь вводит группу чисел, разделенных пробелами или запятыми, которые представляют собой идентификаторы, которые будут отображаться в отчете.

Я использую конвертер, чтобы преобразовать его из строки в список, а затем обратно в форму, где числа разделяются запятой:

@FacesConverter(value="multiProdConverter")
public class MultiProdConverter implements Converter {

    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String value) {
        StringTokenizer splitter = new StringTokenizer(value, " \t\n\r\f,");

        List<Integer> ret = new ArrayList<Integer>();
        while (splitter.hasMoreTokens()) {
            String token = splitter.nextToken();
            ret.add(Integer.parseInt(token));
        }

        return ret;
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object value) {
        return implode((List<Integer>)value);
    }

    private String implode(List<Integer> sdaList) {
        StringBuilder sb = new StringBuilder();
        if (!sdaList.isEmpty()) {
            sb.append(sdaList.get(0));
            for (int i = 1; i < sdaList.size(); i++) {
                sb.append(",");
                sb.append(sdaList.get(i));
            }
        }
        return sb.toString();
    }
}

Однако, что это залучший способ на самом деле получить эту форматированную версию чисел в параметре запроса для внешней страницы?

Я хочу, чтобы пользователь просто нажимал «Отправить» после ввода чисел, и затем страница переходит к этому отчету.Это было бы довольно просто, используя только javascript, но что это за способ «JSF»?

Спасибо, Зак

Ответы [ 2 ]

1 голос
/ 12 августа 2010

Я бы просто перенаправил на внешний ресурс с помощью ExternalContext#redirect().

<h:form>
    <h:inputText value="#{bean.field}" />
    <h:commandLink value="click" action="#{bean.submit}" />
</h:form>

с

public void submit() {
    String url = "http://external.com";
    String query = "name=" + URLEncoder.encode(field.replaceAll("\\s+", ","), "UTF-8");
    FacesContext.getCurrentInstance().getExternalContext().redirect(url + "?" + query);
}
0 голосов
/ 12 августа 2010

Это хороший подход, вы также можете отключить кнопку отправки или командную ссылку, пока все параметры отчета не будут введены, что-то вроде.

<h:outputLink  id="reportURL" value="#{reportBean.url}" rendered="#{reportBean.enableUrl}">
       <h:outputText value="Go To Report" styleClass="someClass"/>   
</h:outputLink>

Однако в вашей логике вы будете иметьчтобы определить, когда это уместно для отображения URL.

Надеюсь, это может помочь вам.

С уважением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...