通过t:saveState和javax.faces.STATE_SAVING_METHOD设置为服务器时,不会重置临时Java成员

时间:2015-10-14 13:24:15

标签: jsf jsf-1.2 transient tomahawk

我们有一个使用Tomahawk的JSF1.2网络应用程序, Select Distinct ProgramName AVG(DATEDIFF(ss,StartDate,Enddate)) as AvgSec, MAX(DATEDIFF(ss,TimeStart,TimeEnd))as MaxSec, MIN(DATEDIFF(ss,TimeStart,TimeEnd))as MinSec, Count(*) as NumberOfRuns From ProgramExecutions WITH(NOLOCK) Group By ProgramName Order By AVG(DATEDIFF(ss,TimeStart,TimeEnd))DESC; 设置为“客户端”。

我们经常使用STATE_SAVING_METHOD来保持bean的内容比一个请求更长的时间。为了最大限度地减少保存数据的数量,我们排除了使用关键字<t:saveState>保存的bean的一些成员:

transient

当通过public class MyBean implements Serializable { private String firstValue; private transient String notSerializedValue; } 重建此bean时,成员<t:saveState>将使用原始值填充,成员firstValue将重置为notSerializedValue;

当我将null设置为STATE_SAVING_METHOD时,通过server恢复时,bean成员notSerializedValue不会重置,但也会填充原始值。

<t:saveState>STATE_SAVING_METHOD时,似乎未对bean进行序列化和反序列化。

我的问题:

servertransient时,我可以强制JSF将我的null bean成员重置为STATE_SAVING_METHOD吗?

1 个答案:

答案 0 :(得分:0)

我找到了解决方案:

使用Sun-Ri,您可以强制ApplicationServer使用web.xml中的context-parameter com.sun.faces.serializeServerState 序列化托管bean。我测试了它,然后我的瞬态成员已经在每个请求中被重置:

<context-param>
         <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
         <param-value>server</param-value>
</context-param>

<context-param>
         <param-name>com.sun.faces.serializeServerState</param-name>
     <param-value>true</param-value>
</context-param>

我还发现这个参数 org.apache.myfaces.SERIALIZE_STATE_IN_SESSION 似乎适合MyFaces,但我无法测试ist:

<context-param>
         <param-name>org.apache.myfaces.SERIALIZE_STATE_IN_SESSION</param-name>
         <param-value>true</param-value>
</context-param>