0

我当前的代码。

<h:form>
   <h:panelGroup id="messagePanel" layout="block">
       <h:messages errorStyle="color: red" infoStyle="color: green" layout="table"/>
   </h:panelGroup>
    <h:panelGrid columns="2">

        // some form input stuff here..

    </h:panelGrid>         

   <h:commandButton class="register-btn" action="#{accountController.create}" value="#{bundle.Register}">
        <f:ajax event="action" execute="@form" render="messagePanel"/>
   </h:commandButton>                       
</h:form>

messagePanel 是显示验证错误的地方。

创建()方法

public String create() {
        try {

            getFacadeUser().create(currentUser);

            FacesContext.getCurrentInstance().getExternalContext().redirect("/index.xhtml");
            return null;
        } catch (Exception e) {
            JsfUtil.addErrorMessage(e, ResourceBundle.getBundle("/Bundle").getString("PersistenceErrorOccured"));
            return null;
        }
    }

成功创建后是否可以调用javascript?目前我的创建表单是一个弹出模式,我想要的是在成功创建后隐藏模式而不是重定向到页面。

我正在使用 JSF 2.1

4

2 回答 2

0

您可以在托管 bean 中为您的对话框创建一个组件绑定,并使用该绑定从您的函数中隐藏对话框。我认为代表您的组件绑定的对象类型是特定于框架的(尽管它们可能都扩展了 UIComponent),因此您需要指定要使用的 JSF 实现来实现完整的解决方案。例如,我在 ADF 中实现了这个用例。

这是 ADF 的一个例子:
<af:popup id="sample" binding="#{viewScope.myBean.myPopup}">

在托管 bean 中:
RichPopup myPopup;
...
public void onSave() {
//save user
myPopup.hide();
}

于 2013-02-11T12:48:49.063 回答
0

使用标准 JSF(阅读:没有组件库或实用程序库,如 PrimeFaces 或 OmniFaces 可以使这更容易),最好的选择是有条件地渲染<script>元素。

<h:panelGroup id="script">
    <h:outputScript rendered="#{not empty accountController.currentUser.id}">
        alert('User successfully created!');
    </h:outputScript>
</h:panelGroup>

中引用它<f:ajax ... render="script">

于 2013-02-12T12:29:50.963 回答