操作后<h:commandbutton>不刷新页面</h:commandbutton>

时间:2013-03-13 09:45:29

标签: jsf richfaces

嗨我们正在使用a4j标签。

这里我们在点击按钮后从数据库中检索数据。即使数据在服务器中可用,它也不会显示在视图上。手动刷新网页后会导致数据显示。

这是代码段                  ....这里的一些代码

  <rich:tab id="menu5" label="Recall">
  <ui:include src="/pages/mctrans/reCallMcifTrans.xhtml" />  
  </rich:tab>

reCallMcifTrans.xhtml包含以下代码

<h:commandButton type="button" id="reCallbutton1" value="   Search   "
    styleClass="commandExButton">
    <a4j:support event="onclick" id="ajsf12"
        oncomplete="javascript:alert('Search   Completed');javascript:document.body.style.cursor='default';"
        action="#{mcifRecallTransBean.reCallSearch}" reRender="reCallgrid1" />
</h:commandButton>

2 个答案:

答案 0 :(得分:1)

看起来你正在使用RichFaces 3.3。因此,您不需要<h:commandButton <a4j:support>,因为您可以使用已经执行此操作的<a4j:commandButton>。您可以将代码重构为:

<a4j:commandButton type="button" id="reCallbutton1" value="Search"
    styleClass="commandExButton"
    action="#{mcifRecallTransBean.reCallSearch}"
    reRender="reCallgrid1"
    oncomplete="javascript:alert('Search   Completed');javascript:document.body.style.cursor='default';" />

确保reCallgrid1组件在<h:form>的同一<a4j:commandButton>内可用。

由于您还希望在单击按钮时添加在搜索数据时等待行为,因此您可以使用<a4j:status>以及<a4j:commandButton>,如{ {3}}。这是一个基本的例子:

<a4j:commandButton type="button" id="reCallbutton1" value="Search"
    styleClass="commandExButton"
    action="#{mcifRecallTransBean.reCallSearch}"
    reRender="reCallgrid1" />
<!-- Note that there's no oncomplete in this case -->
<a4j:status for="reCallbutton1">
    <f:facet name="start">
        <h:graphicImage  value="/res/images/wait.gif"/>
    </f:facet>
</a4j:status>

最后但并非最不重要的一点是,您应该将托管bean切换为请求范围并使用RichFaces强大的<a4j:status> demo来模拟JSF 2 <a4j:keepAlive>。您甚至可以在托管bean上以注释的形式使用它(无需其他配置):

@KeepAlive
public class McifRecallTransBean {
    //managed bean code here...
}

答案 1 :(得分:0)

当您在bean中使用请求参数时,需要使用您的操作再次传递它们:

<h:commandButton type="button" id="reCallbutton1" value="Search" styleClass="commandExButton">
    <a4j:support event="onclick" id="ajsf12" oncomplete="javascript:alert('Search  Completed');javascript:document.body.style.cursor='default';" action="#{mcifRecallTransBean.reCallSearch}" reRender="reCallgrid1" />
    <f:param name="param1" value="#{param['param1']}" />
    <f:param name="param2" value="#{param['param2']}" />
</h:commandButton>