问题:
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> |
改用 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> |
也不能改成lazy=false啊,数据量太大不能一次加载完
解决:
最粗暴的办法:把bean 设置为 @SessionScoped
这样submit 后能恢复view tree,从而调用button.action