UIComponent の encodeAll() メソッドによって生成された応答を文字列に格納して、コンテンツを別の場所で使用したいと考えています。
コンテンツを StringWriter に書き込む特別な ResponseWriter を提供する FacesContextWrapper をセットアップしようとしましたが、機能しません。私の ResponseWriter が呼び出されないようです。
私は他の方法があることを知っており、適切な場所にエンコードします。おそらくそうするでしょうが、それでもその方法を知りたいです。特にコンテンツの圧縮、つまりタグ間にスペースを入れたり、改行を入れたりすることは非常に重要です。
編集:
いくつかのファセットがあり、これらのコンテンツは JavaScript に渡されるために使用されます。そのため、レンダリングされたファセットのコンテンツを 1 行に圧縮する必要があります。最初にライターをラップしてコンテンツを取得し、それを自分で圧縮してパラメーターとして JavaScript に追加しようとしましたが、うまくいきませんでした。コンテンツを適切な場所にレンダリングするようになりましたが、1 行に圧縮されていません。
EDIT2:
Javascript 文字列は、行末に「\n\」が使用されている場合にのみ複数行にすることができます。encodeAll() メソッドによって生成されたコンテンツを変更することはできないので、非常に困難です。生成されたコンテンツをキャプチャしてから、手動で文字列を圧縮する必要があります。しかし、それを行う方法は?ResponseWriter-wrapping はうまくいきませんでした。
解決:
私の解決策を他の人と共有したいです!ResponseWriter は、cloneWithWriter(Writer w)
私が知らなかったメソッドを提供しています。カスタム StringWriter 実装でこのメソッドを使用することにより、出力をバッファーにキャプチャし、最終的にそのバッファーを文字列として使用できます。