1

这是我的问题:我需要为报告创建一个(看似)简单的前端。用户输入一堆数字,用空格或逗号分隔,它们是报告中将显示的 ID。

我使用转换器将其从字符串更改为列表,然后从那里返回到数字用逗号分隔的形式:

@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”的方法是什么?

谢谢,扎克

4

2 回答 2

1

我只会在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);
}
于 2010-08-12T15:53:21.397 回答
0

这是一个很好的方法,您还可以禁用提交按钮或命令链接,直到输入所有报告参数,例如。

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

但是,在您的逻辑中,您必须确定何时适合呈现 url。

希望这可以帮助你。

问候。

于 2010-08-12T14:29:08.260 回答