【问题标题】:JSF submit button after submit call javascript function提交调用javascript函数后JSF提交按钮
【发布时间】:2011-09-05 11:08:02
【问题描述】:

我的 jsf 页面(弹出窗口)中有一个表单,用于上传文件。上传文件时我需要刷新父页面。我可以用来完成这项任务的最佳方法是什么。

我的 JSF 页面很简单,看起来像这样

<h:form id="uploadForm" enctype="multipart/form-data">
    <ul class="page">
        <li>
            <h:messages layout="list" for="uploadForm" styleClass="generic-message"/>
        </li>
        <li>
            <h:outputLabel for="file" value="select a file" />
            <t:inputFileUpload id="file" value="#{aBean.file}" required="true" requiredMessage="File need to be selected"/>
            <h:message for="file" styleClass="msg" />
        </li>
        <li>
            <h:outputLabel value="Name" />
            <h:inputText id="name" value="#{aBean.name}" label="#{aBean.name}" required="true" requiredMessage="Name is required"/>
            <h:message for="name" styleClass="msg" />
        </li>
        <li>
            <h:commandButton value="Upload" action="#{aBean.submit}" />
        </li>
    </ul>
</h:form> 

非常感谢任何建议

【问题讨论】:

    标签: java javascript jquery jsf jsf-2


    【解决方案1】:

    在弹出窗口中,需要有条件地渲染一个

    <script>window.opener.location.reload(true);</script>
    

    这样父窗口就会被刷新。

    您可以通过在操作方法中触发一些布尔值来做到这一点

    private boolean reloadParent;
    
    public void submit() {
        // ...
        reloadParent = true;
    }
    
    public boolean isReloadParent() {
        return reloadParent;
    }
    

    并将脚本包装在带有rendered 属性的&lt;ui:fragment&gt; 中

    <ui:fragment rendered="#{aBean.reloadParent}">
        <script>window.opener.location.reload(true);</script>
    </ui:fragment>
    

    【讨论】:

    • thanx balusc 的及时回复。我添加了我的 JSF 代码 <fragment rendering="#{aBean.print}"><script type="text/javascript"> 窗口。打印(); </script></fragment> 我把这个代码块放在 <composition template="/templates/aLayout.xhtml"></composition> 但javascript函数没有触发我放置 的位置有什么问题吗
    • 需要放在弹窗中。
    • 我的弹出页面中有 区域,并且我已将 UI 片段部分放在所有这些 UI 定义的区域之外。所以 javascript 没有被触发.如果我听起来很困惑,真的很抱歉..对 JSF 来说有点新......
    • 放到&lt;ui:define&gt;里面。
    • 我已经为我的 bean 添加了 VIewScope,并且我的 bean 中也有一个 postConstruct 方法。当我点击提交时,我看到我的布尔值“reloadParent”得到了值“true”,但此后它再次进入 post 构造方法,所以我的布尔值仍然是 false.. 请就这个问题告诉我
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多