【问题标题】:fire onclick event after jsf validation phase is successfuljsf 验证阶段成功后触发 onclick 事件
【发布时间】:2015-06-03 05:41:30
【问题描述】:

我想在我的网站中显示处理微调器。我在命令按钮上使用以下简单的 onclick 事件

<h:commandButton class="uploadButton"  onclick="monitor();" value="Upload" update="msgsuccess" action="#{appUploadBean.uploadApp()}"/>


<p:outputPanel id="parentPanel" style="display:none">
                                   <div id="uploadPForm:msgupload" class="ui-messages ui-widget" aria-live="polite" data-summary="data-summary" data-severity="info">
                                      <div class="ui-messages-info ui-corner-all">
                                         <a href="#" class="ui-messages-close" onclick="$(this).parent().slideUp();return false;">
                                            <span class="ui-icon ui-icon-close" />
                                         </a>
                                        <h:graphicImage id="image" library="assets" name="images/ajax-loader.gif"></h:graphicImage> 
                                         <ul>
                                            <li>
                                               <span class="ui-messages-info-summary">Uploading Apk</span>
                                            </li>
                                         </ul>
                                      </div>
                                   </div>
                                 </p:outputPanel>  

--javascript

    function monitor(){
                console.log("monitor called");
                var loading = document.getElementById("uploadPForm:parentPanel");
                loading.style.display = "block";
                return false;           
            }

现在的问题是,只要我单击命令按钮,微调器就会开始显示。我只想在验证阶段成功后显示微调器,即在第 3 阶段之后..

有什么办法可以做到吗?

【问题讨论】:

  • 为什么不用渲染?哪个将基于支持 bean 中的某些属性,验证后将设置为 true,您将通过 ajax 更新此 outputPanel?
  • 你能给我举个例子吗?控制在第 5 阶段进入支持 bean ..我们如何在验证后设置标志?还有如何在验证后触发 ajax..我是 jsf 的新手..

标签: javascript jquery jsf


【解决方案1】:

在支持 bean AppUploadBean 中,您将拥有属性:

Bean 必须是 ViewScoped(首选)或 SessionScoped

private boolean rendered;

public String uploadApp(){
...
rendered = true;
return "actualpage.xhtml?faces-redirect=true";
}

public boolean isRendered(){
return rendered
}

在 xhtml 中:

<h:form>
...

    <p:commandButton class="uploadButton" value="Upload" update="msgsuccess" ajax="false" action="#{appUploadBean.uploadApp}"/>

    <p:outputPanel id="parentPanel" rendered="#{appUploadBean.rendered}">
    ...
    </p:outputPanel> 

...
</h:form> 

【讨论】:

  • 实际上我在提交时上传文件,我正在浏览在线文章文件上传不适用于 ajax 调用...所以我想我将不得不坚持使用 h:commandbutton
  • 尝试了上面的代码,但是由于文件没有通过,所以文件对象出现 NullPointerException
  • @mihirS 我稍微修改了我的答案。现在它不是基于 ajax 的。
  • 感谢您的快速回复,但在修改后的代码中,微调器在处理 uploadApp 功能后显示,我想在控制进入第 5 阶段后立即显示微调器...这里上传应用后会出现微调器...
  • 我认为在生命周期中JSF render phase 之前不可能渲染任何东西......你可以在阶段监听器中管理生命周期,但我仍然认为你不会实现你想要的行为。在我看来,它不是标准的用户预期行为。也许您应该更准确地描述您想要实现的目标。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-27
  • 2012-12-10
  • 1970-01-01
  • 1970-01-01
  • 2014-09-18
  • 1970-01-01
  • 2010-09-12
相关资源
最近更新 更多