2017-08-24 94 views
0

我有这样的托管bean:JSF ManagedBean大小限制

@ManagedBean 
@ViewScoped 
public class bean implements Serializable { 
    private List<Project> projectList = new ArrayList<Project>(); 
    @PostConstruct 
    private void init() { 
     projectList = projectManager.getActiveProjects(); 
    } 
    public void save() { 
     //save 
    } 
} 

问题是,当我打电话从XHTML页面保存方法。 我希望简单地进入保存方法并完成任务。不幸的是,它只能进入init方法,并且从不进入保存。

看来问题出自projectList列表。如果我不保存列表中的项目,那么一切正常。

我也有这个配置在web.xml中

<param-name>javax.faces.STATE_SAVING_METHOD</param-name> 
<param-value>client</param-value> 

如果我将值设置为服务器,将工作,但我不知道如果我能做到这一点。 所以我的问题是:一个jsf的beanbean有一个最大尺寸?如果是,那么如果我需要存储“更大”的数组列表,我该怎么办?将STATE_SAVING_METHOD设置为服务器是一个很好的解决方案?

+0

_IT看来问题是从projectList列表。如果我不把项目保存在列表中,那么一切正常。但是,为什么你认为**长度**是罪魁祸首。请创建一个[mcve]来演示问题(另请参阅http://www.stackoverflow.com/tags/jsf/info)。你的问题可能是http://xyproblem.info,甚至可能是在创建[mcve]的过程中,你找到真正的原因。 – Kukeltje

回答

0

STATE_SAVING_METHOD是指定保存组件状态的位置。 当您使用“服务器”时,JSF容器将在服务器内存中维护组件状态,并且不会询问客户端组件状态。 当您使用'客户端'JSF容器假设客户端将存储组件状态时,不需要服务器内存,但客户端需要每次发送组件状态,因此带宽将会增加。

在你的情况下,问题可能是一个转换错误(你正在发送'项目'列表)。

发现,可能隐藏了消息的错误,使用的开发模式:

<context-param> 
    <param-name>javax.faces.PROJECT_STAGE</param-name> 
    <param-value>Development</param-value> 
</context-param>