2015年11月13日 | Leave a comment 问题: dataTable column 中有一个 <h:commandButton action=”#{detailBean.view(1)}” value=”detail” />,点了没有调用detailBean.view方法。但是在dataTable 之外放一个同样的button 是可以用的。 研究: 发现跟dataTable lazy=true 有关,简单的dataTable 是正常的。 这是正常的,点btn 会跳到详情 <p:dataTable value="#{[1,2,3,4]}" var="row" rows="20" paginator="true" lazy="false" > <p:column> <h:commandButton action="#{userDetail.view(row)}" value="btn"></h:commandButton> </p:column> </p:dataTable> 12345 <p:dataTable value="#{[1,2,3,4]}" var="row" rows="20" paginator="true" lazy="false" > <p:column> <h:commandButton action="#{userDetail.view(row)}" value="btn"></h:commandButton> </p:column> </p:dataTable> 改用 lazy=true 后就不正常了 <p:dataTable value="#{userList.searchResult}" var="row" rows="20" paginator="true" lazy="false" > <p:column> <h:commandButton action="#{userDetail.view(1)}" value="btn"></h:commandButton> </p:column> </p:dataTable> 12345 <p:dataTable value="#{userList.searchResult}" var="row" rows="20" paginator="true" lazy="false" > <p:column> <h:commandButton action="#{userDetail.view(1)}" value="btn"></h:commandButton> </p:column> </p:dataTable> 也不能改成lazy=false啊,数据量太大不能一次加载完 解决: 最粗暴的办法:把bean 设置为 @SessionScoped 这样submit 后能恢复view tree,从而调用button.action