2011-05-20 81 views
0

我试图在primefaces中使用更新标记来显示/不显示primefaces数据表。在JSF中更新和呈现标记

当我重新加载(F5)页面时,该表格将正确呈现,但然后我将丢失所有我已经注入表单的数据。我正在四处寻找ajax解决方案,但到目前为止我还找不到任何解决方案。

我的代码:

<h:form id="adminForm"> 
    <h:selectOneMenu id="adminTypeMenu" value="#{adminBean.orgType}"> 
    <f:selectItem itemValue="" itemLabel="- Select One -"/> 
    <p:ajax actionListener="#{adminBean.updateOrgType}" update="adminForm" /> 
    </h:selectOneMenu> 
    <p:dataTable id="adminMacTable" value="#{adminBean.currentArray}" var="currentOrg" 
    rendered="#{adminBean.Type eq 'bco'}" selection="#{adminBean.selectedMac}" 
    emptyMessage="No Records Found"> 
    ... 
    </p:dataTable> 
</h:form> 

当前实现显示数据表,但删除任何表单输入我了。有没有办法在不清除我的表单值的情况下呈现数据表?

更新:刚试过相同的代码没有和使用,但得到了同样的结果,仍然尝试其他方法!

+0

您的adminBean的范围是什么? – 2011-05-20 22:44:50

+0

这是一个对话范围 – user560785 2011-05-20 23:09:38

+0

'#{adminBean.Type}'无效。它不应该是'#{adminBean.type}'吗?你尝试过'update =“adminMacTable”'? – BalusC 2011-05-21 03:38:44

回答

0

试试这个:

<h:form id="adminForm" prependId="false"> 
    <h:selectOneMenu id="adminTypeMenu" value="#{adminBean.orgType}"> 
    <f:selectItem itemValue="" itemLabel="- Select One -"/> 
    <p:ajax actionListener="#{adminBean.updateOrgType}" update="adminMacOutput" /> 
    </h:selectOneMenu> 
    <p:outputPanel id="adminMacOutput"> 
    <p:dataTable id="adminMacTable" value="#{adminBean.currentArray}" var="currentOrg" 
    rendered="#{adminBean.Type eq 'bco'}" selection="#{adminBean.selectedMac}" 
    emptyMessage="No Records Found"> 
    ... 
    </p:dataTable> 
    </p:outputPanel> 
</h:form> 

如果还是不行,请尝试将DataTable中一个单独的表单中,并更新该第二种形式。

+0

p:outputPanel是正确的解决方案!我以前实际使用过它,但忘记了它是多么有用:)。谢谢! – user560785 2011-05-26 04:45:12

0

我在猜测AdminBean可能在请求范围内,在这种情况下,您的ajax事件会更新它,但当您按F5时它会被重新创建。如果是的话ViewScoped将帮助:

@ManagedBean(name = "adminBean") 
@ViewScoped 
public class AdminBean { 

} 
+0

目前的实现是对话作用域,我只是再次尝试同样的事情,但用p:面板而不是表单。同样的行为不幸的是:( – user560785 2011-05-20 23:10:17