我希望在C#中使用扩展方法实现对象列表中的功能.
像这样的东西:
List<DataObject> list;
// ... List initialization.
list.getData(id);
Run Code Online (Sandbox Code Playgroud)
我如何用Java做到这一点?
是否可以明确拒绝 JSF 序列化某些组件树?目前我正在将一个不可序列化的对象传递给<h:inputText>:
<h:inputText value="#{nonSerializableBean.nonSerializableClassInstance}" />
Run Code Online (Sandbox Code Playgroud)
单击几次后会发生什么(在视图恢复期间):
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
Run Code Online (Sandbox Code Playgroud)
我认为发生这种情况是因为 JSF 无法恢复nonSerializableClassInstance:
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)
Run Code Online (Sandbox Code Playgroud)
一个额外的问题:不让支持 bean 可序列化可以吗?那么这是否应该阻止这些序列化/反序列化?
一些背景:
我们有很多 3rd 方类,需要在 JSF 中提供表单。问题是我们不能直接在 JSF 页面上使用这些类,因为它们没有实现 Serialized 接口,因此如果 JSF 运行时决定序列化/反序列化页面和组件树,它们将会/应该失败。这些类是“封闭的”,我们不允许修改它们。
运行 Mojarra 2.0.2。