JSFがいくつかのコンポーネントツリーを直列化することを明示的に拒否できますか?現時点では私は<h:inputText>
に非直列化可能なオブジェクトを渡しています:アプリケーションの特定の部分に対するコンポーネントツリーの直列化の防止
<h:inputText value="#{nonSerializableBean.nonSerializableClassInstance}" />
数回のクリックは、私が(ビューの復元中に)取得することで後に何が起こる:
javax.faces.FacesException: Unexpected error restoring state for component
with id configurationForm:j_idt292:j_idt302:field. Cause:
java.lang.IllegalStateException: java.lang.InstantiationException:
my.namespace.NonSerializableClass
私はこれがために発生考えます
Caused by: java.lang.IllegalStateException: java.lang.InstantiationException: com.foobar.utils.text.Period
at javax.faces.component.StateHolderSaver.restore(StateHolderSaver.java:110)
at javax.faces.component.ComponentStateHelper.restoreState(ComponentStateHelper.java:292)
at javax.faces.component.UIComponentBase.restoreState(UIComponentBase.java:1444)
at javax.faces.component.UIOutput.restoreState(UIOutput.java:255)
at javax.faces.component.UIInput.restoreState(UIInput.java:1359)
ボーナス質問::バッキングBeanはSerializableを作るためではない、それはOKですJSFはnonSerializableClassInstance
を復元することはできませんか?これは、これらのシリアル化/逆シリアル化を防止する必要がありますか?
いくつかの背景:
私たちは、JSFでのフォームを提供する必要があるサードパーティのクラスの束を持っています。問題は、これらのクラスをJSFページで直接使用することができない点です。これは、Serializableインターフェイスを実装していないため、JSFランタイムがページとコンポーネントツリーを直列化/逆シリアル化する場合に失敗するためです。クラスは「閉鎖」されており、変更することはできません。
Mojarra 2.0.2を実行しています。
* *ページと*これらのクラスはどういう意味ですか? JSFのページをシリアライズ可能と宣言する方法がわかりません。あなたはもう少し明確にすることができますか?いくつかのコードサンプルを提供することによって? –
申し訳ありませんが、私はバッキング豆を意味します。あなたはJSFに*ページ*がないことは間違いありません(ただし、ViewRootがあります)。私はここで私の考えに問題がある、私は問題をよりよく反映するために質問を更新する。 –