【问题标题】:Site doesn't reload after button click单击按钮后网站不会重新加载
【发布时间】:2017-05-08 08:47:20
【问题描述】:

我开发了一个视图来保存Child-objects。一切正常,但要在 <p:dataTable> 中查看我的其他对象,我总是必须手动重新加载网站。

<p:commandButton> 的代码下方,它将表单数据发送到我的控制器类。

<h:panelGrid columns="3">
   <p:commandButton value="Save"
     action="#{childController.doSaveChild}"
     oncomplete="PF('childAddDialog').hide()"
     update=":childForm"/>
</h:panelGrid>

我已经尝试使用ajax="false",但它不起作用。

点击保存按钮后如何重新加载网站?

更新:

&lt;p:dataTable&gt;我的观点.xhtml:

 <h:form id="childForm">
 <p:dataTable id="childTable" var="child"
  widgetVar="childTable" value="#{childController.children}"
  paginator="true" rows="10" paginatorPosition="bottom"
  paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink}
  {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}
  {Exporters}"
  rowsPerPageTemplate="10,25,50">

 <p:column headerText="Firstname"     
    filterBy="#{child.firstName}"     
    sortBy="#{child.firstName}" filterStyle="display:none">    
    <h:outputText value="#{child.firstName}"/>                  
 </p:column>                                             
 <p:column headerText="Lastname"          
    filterBy="#{child.lastName}"      
    sortBy="#{child.lastName}" 
    filterStyle="display:none">             
    <h:outputText value="#{child.lastName}"/>   
 </p:column>                                             
 <p:column headerText="Birthday"     
    filterBy="#{child.birthday}"     
    sortBy="#{child.birthday}" 
    filterStyle="display:none">       
    <h:outputText value="#{child.birthday}"/>             
 </p:column>
 </dataTable>
 </form>

这里提供子视图的方法:

public Collection<Child> getChildren(){
    return children;
}

@PostConstruct
public void initList(){
    setChildren(childService.getAllChildren());
}

【问题讨论】:

  • 您正试图让您的解决方法发挥作用。我会专注于最初的问题。
  • 您认为最初的问题是什么?我只想让网站自动重新加载。
  • 正确的解决方案是让更新工作。您需要发布您的 dataTable xhtml 和相关的支持 bean 代码。
  • 呃,它不能正常工作。也许您在保存后忘记更新 children 属性,因此它仍会显示与添加新孩子之前一样的列表?
  • Java 方法不会被魔法调用。它们被逻辑调用。这里唯一感兴趣的方法是doSaveChild()。只要您的 doSaveChild() 方法不调用例如initList(),那么children显然不会在你救了孩子之后更新。

标签: ajax jsf primefaces


【解决方案1】:

上面的 xhtml 代码很好。

要让网站自动更新,有必要在控制器中的保存方法之后再次加载包含所有子项的列表。

public void doSaveChild(){
   childService.saveChild(child);
   child = null;
   initNewChild();
   initList();  //this is needed to get up-to-date list in view
}

【讨论】:

  • 我建议在你的命令按钮上使用process="@this"
【解决方案2】:

你可以通过 javascript 来实现:

<p:commandButton value="Save"
 action="#{childController.doSaveChild}" process="@form" update="@none" oncomplete="location.reload();"/>

或您的操作方法中的返回字符串:

public String doSaveChild(){
//your logic
return "/yourpage?faces-redirect=true"}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    • 2012-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-14
    • 2018-10-15
    相关资源
    最近更新 更多