【问题标题】:h:commandButton partial refresh cannot workh:commandButton 部分刷新不起作用
【发布时间】:2016-06-06 05:20:30
【问题描述】:

我是 JSF 新手,在我的 JSF 2.2 中实现部分刷新/渲染时遇到了困难,我正在使用 .xhtml 页面,我已经通过 Internet 搜索了解决方案,但无法正常工作。我的做法错了吗?

这是我的代码:

<h:form>
  <div class="container">
    <div class="section">

      <!--   Icon Section   -->
      <h:panelGroup id="result" styleClass="row">
        <ui:repeat var="project" value="#{homeBean.displayProjectList}">

          <div class="col s12 m6 l4">
            <div class="card">
              <div class="card-image">
                <img src="resources/materialize/background1.jpg" />
                <span class="card-title">#{project.title}</span>
              </div>
              <div class="card-content">
                <p>#{project.summary}</p>
              </div>
              <div class="card-action">
                <a href="./event.xhtml">More</a>
              </div>
            </div>
          </div>

        </ui:repeat>
      </h:panelGroup>


      <div class="row center">
        <h:commandButton styleClass="btn-large yellow lighten-2 black-text" value="SHOW MORE" actionListener="#{homeBean.showMore()}" >
          <f:ajax render="result" />
        </h:commandButton>

      </div>

    </div>
  </div>
</h:form>

按下命令按钮时,我希望只刷新 panelGroup id="result" 中涵盖的部分,它确实更新了,但我希望只刷新该部分而不是整个页面。

非常感谢您的时间和精力。

【问题讨论】:

  • 在 webbrowser 中按 F12 打开 webdeveloper 工具集。当客户端出现故障时,您通常会在那里找到线索。很有可能在控制台中可以看到一个简单的(并且非常易于搜索)JS 错误消息。
  • 谢谢@BalusC,您的方法确实帮助我找到了答案,直到我使用chrome的开发工具,我才看到错误“majarra is undefined”错误。非常感谢您,并会为我的案例发布答案。欣赏

标签: jsf jsf-2


【解决方案1】:

这对我来说看起来不错,应该可以。您确定整个页面都在刷新吗?

&lt;f:ajax&gt; 应该可以解决问题。

【讨论】:

  • 只是几件事,您不一定需要在命令按钮中使用actionListener,操作很好。您不必添加额外的&lt;h:panelGroup&gt;,为&lt;ui:repeat&gt; 定义一个ID,并在&lt;f:ajax&gt; 标签的渲染属性中使用它
  • 我知道您还没有足够的声誉来发布 cmets,但请不要以此为借口发布 cmets 作为答案。这篇文章根本没有回答具体问题。
  • 我明白,很抱歉。只是想帮忙!
  • 我对你的意图毫不怀疑。
【解决方案2】:

我找到了答案,对于我的情况,我通过导入 javax.faces-2.2.7.jar 使用 JSF 2.2,我应该在 head 标记中设置以下 outputScript 声明

<h:outputScript library="javax.faces" name="jsf.js" target="head" />

现在像魅力一样工作。

参考:

Programatically adding Ajax Behaviour - “Mojarra is not defined”

【讨论】:

  • 只要您有&lt;h:head&gt; 而不是&lt;head&gt;,您就不需要显式包含该脚本。
【解决方案3】:

从 h:commanButton 中移除 actionListener 并将监听器放入 f:ajax 并尝试

【讨论】:

  • 将来,在发布答案之前,最好尝试自己在沙盒项目中重现所描述的问题。如果您找到了原因和解决方案,请尝试详细描述问题的原因并解释建议的解决方案如何准确地解决问题。这也是学习新事物的好方法。也就是说,当前的答案是完全错误的,只是在黑暗中拍摄。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 2015-08-07
相关资源
最近更新 更多