如何在JSF 2.0中检测浏览器后退和刷新按钮按下

时间:2012-03-19 12:33:15

标签: jsf-2

我有一个JSF页面,我在其中有按钮。我也在制作一个错误脚本。

 <ui:composition template="./WEB-INF/templates/layout.xhtml">
     <ui:define name="title">#{newsAndAnnouncementAddUpdate.pageTitle}</ui:define>
     <ui:define name="content">
         <h:form id="news_advertisement_form" prependId="false"  >

             <h:commandButton id="Save"
                              value="#{label.save}"
                              actionListener="#{newsAndAnnouncementAddUpdate.checkForAddUpdate}"
                              disabled="#{newsAndAnnouncementAddUpdate.disable}"
                              styleClass="ButtonStyle"
                              style="position: relative;top: 100px;left: 330px" />

             <h:commandButton id="NoAfterSaveBtn"
                              action="#{newsAndAnnouncementAddUpdate.Cancel}"
                              style="background-color:#e6eff6; border: #e6eff6; visibility:hidden">
             </h:commandButton>
             <h:outputText value="#{newsAndAnnouncementAddUpdate.errorScript}" escape="false"/>

        </h:form>

        <h:commandButton id="YesAfterSaveBtn"
                         action="#{newsAndAnnouncementAddUpdate.stayOnpage}"
                         style="background-color:#e6eff6; border:#e6eff6; visibility:hidden">
        </h:commandButton>

    </ui:define>

</ui:composition>

我的错误脚本正在生成这样的

@ManagedBean
@ViewScoped
public class NewsAndAnnouncementAddUpdate implements Serializable {

    private String errorScript;
    private String field;

    //Constructor
    public NewsAndAnnouncementAddUpdate() {
         errorScript = "";
         ...
    } //end of constructor

    public String getErrorScript() {
        return errorScript;
    }

    public void setErrorScript(String errorScript) {
        this.errorScript = errorScript;
    }

}//end of class NewsAndAnnouncementAddUpdate

当用户单击“保存”按钮时,则调用以下方法并将某些内容放入errorScript变量中。当第一次加载页面时,errorScript变量中没有任何内容,因此没有任何反应。但是当用户单击“保存”按钮时,我会检查是否有任何必填字段为空,如果是,则生成错误脚本,如下所示

public void checkForAddUpdate(ActionEvent event) {

    String result = validations();
    System.out.println(errorScript);
    if (result.equals("OK")) {
        System.out.println("Every Thinsg is fine");
    } else if (result.equalsIgnoreCase("error")) {
        return;
    }
    ...
} //end of checkForAddUpdate()

private String validations() {
    if (headline.trim().equals("")) {
        makeErrorScript("headline");          
        return "error";
    } else if (details.trim().equals("")) {
        ...
    } else {
        return "OK";
    }
} //end of validations()

private void makeErrorScript(String field){

    field = ConnectionUtil.getMessage("labels", field, null);
    String[] replace = {field};
    String message = ConnectionUtil.getMessage("messages_en_US", "emptyfield", replace);
    errorScript = ConnectionUtil.getErrorMessages(message);

} //end of makeErrorScript()

我只是留言。例如必须输入标题并将其作为参数传递给getErrroMessage。这是我的方法

public static String getErrorMessages(String errorParam) {

   errorParam = "\""+ errorParam + "\"";
   String myScript = "<script>"
           + "           $(document).ready(function(){"
           + "               $.dialog({ "
           + "                   message: " + errorParam +","
           + "                   imageIcon: false          ,"
           + "                   type: \"error\"           ,"
           + "                   okButtonID: \"ok\"        , "
           + "                   okButtonValue: \"OK\""
           + "               });"  //end of $.dialog()
           + "           });" //end of $(document).ready(fn)
           + "       </script>";

    return myScript;

} //end of getErrorMessages()

现在您可以看到,当第一次用户打开页面时,errorScript变量为空,因此没有显示任何内容,但是当您单击“保存”按钮时,如果缺少必填字段,则生成错误脚本,此脚本放在errorScript变量中,它替换 h:outputText value =“#{newsAndAnnouncementAddUpdate.errorScript}”escape =“false”并运行脚本,然后显示对话框。到目前为止一切正常。

但我只是注意到,一旦显示一个对话框,然后你按下刷新按钮,然后不是调用构造函数(你正在刷新页面,所以页面应该从头开始加载)它调用我的 checkForAddUpdate (ActionEvent事件)。这里的errorScript不为空,因此它再次显示该消息。逻辑上,当我刷新页面然后构造函数应该调用,在构造函数中我使用errorSript =“”;因此页面刷新时不会显示任何消息。为什么在页面刷新时调用 checkForAddUpdate(ActionEvent事件)?我希望当用户按下刷新按钮时,我的errorScript变量应该变为 empth(“”),因此对话框不显示。有什么办法可以检测浏览器刷新按钮,然后清空errorScript变量。我有很多输入类型。或选择类型变量,我不处理只有一个必需属性。

实际上我并没有想出在保存按钮上单击如何将此消息传递给我的脚本,例如,必须输入标题。因为我从JSF资源文件中得到了消息。如果我硬编码jQuery(JavaScript)的值,那么我的本地化会受到影响。这就是我这样做的原因。

但我想问我是以正确的方式做的吗?或者有更好的方法可以用来生成errorScript。我必须使用这个对话框。意味着我的脚本应该被调用。

谢谢

0 个答案:

没有答案