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 に答える