2015-06-16 45 views
1

我想在jsf中使用下面的代码打开一个弹出窗口。提交后在弹出窗口中显示字段的错误消息

<a href="#" data-toggle="modal" data-backdrop="static" data-target="#forgotPassword">Forgot password</a> 

<div class="modal fade" jsf:id="forgotPassword"> 
    <div class="modal-dialog"> 
     <form jsf:id="reset-password-form"> 
      <div class="modal-content"> 
       <div class="modal-header">     
        <h4 class="modal-title">Request for new password</h4> 
       </div> 
       <div class="modal-body"> 
        <div class="form-group"> 
         <label for="inputEmail">EmailId</label> 
         <div class="col-sm-9"> 
          <input type="text" class="form-control" jsf:id="inputEmail" 
           jsf:value="#{myBean.passwordResetEmail}" 
           name="inputEmail" /> 
          <h:message for="inputEmail" /> 
         </div> 
        </div> 
       </div> 
       <div class="modal-footer"> 
        <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button> 
        <button class="btn btn-primary" 
         jsf:action="#{myBean.resetPassword}">sendPassword</button> 
       </div> 
      </div> 
     </form> 
    </div> 
</div> 

我在这里面临一些问题。

  1. 当用户输入错误的电子邮件ID时,用户应在同一页面上,并显示错误。但是我看到,当输入无效的emailId时,弹出窗口会自动关闭。
  2. 我也想显示成功消息。

任何人都可以帮助我如何做到这一点。

回答

4

当用户输入错误的电子邮件ID时,用户应在同一页面上,并显示错误。但是我看到,当输入无效的emailId时,弹出窗口会自动关闭。

确实您正在同步提交表单并执行完整页面重新加载。正是完整的页面重新加载导致了对话框的“自动关闭”(它实际上并没有关闭,这完全像在打开对话框后直接在浏览器中按F5键)。您需要异步提交表单并仅执行部分重新加载。

你可以做到这一点,只需在UICommand组件封装<f:ajax>,酷似平均JSF教程所示<h:commandButton>(这你<button jsf:action>passthrough element最终被转换到)。

<button ... jsf:action="#{myBean.resetPassword}"> 
    <f:ajax execute="@form" render="@form" /> 
</button> 

两个executerender属性指示在该特定示例中,整个表格必须被处理,且只有形式本身必须被部分地更新。只要窗体在模态对话框内,而不在外面,那么这将保持模态对话框打开(至少在HTML DOM树中)。


我也想显示成功的消息也是如此。

只需在操作方法中添加(全局)面孔消息。

public void resetPassword() { 
    // ... 

    FacesMessage message = new FacesMessage("Some success message"); 
    FacesContext.getCurrentInstance().addMessage(null, message); 
} 
<h:messages globalOnly="true" /> 

null客户ID表示一个全局面消息,并且当globalOnly="true"设置那些才会显示。

+0

非常感谢。它有帮助。 – Patan

+1

不客气。 – BalusC

相关问题