У меня есть страница 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 = "# {newsAndAnnouncementAddUpdate.errorScript}" escape = "false" и запускает сценарий, идиалог показан.до сих пор все работало нормально.
Но я только что заметил, что как только появляется диалоговое окно, а затем вы нажимаете кнопку обновления, а не вызываете конструктор (вы обновляете страницу, поэтому страница должна бытьзагрузить с нуля) он вызывает мой checkForAddUpdate (событие ActionEvent) .Здесь errorScript не пустой, поэтому он снова показывает сообщение.Логически, когда я обновляю страницу, должен вызываться конструктор, в конструкторе я использую errorSript = "";поэтому сообщение не будет отображаться при обновлении страницы.Почему он вызывает checkForAddUpdate (событие ActionEvent) , когда я обновляю страницу?Я хочу, чтобы, когда пользователь нажимал кнопку обновления, моя переменная errorScript должна была иметь вид empth ("") , поэтому диалог не отображается.Можно ли как-то обнаружить нажатие кнопки обновления браузера, а затем очистить переменную errorScript.У меня есть много типов ввода.или выберите переменные типа, я не работаю только с одним обязательным атрибутом.
На самом деле я не догадывался, что при нажатии кнопки сохранения, как я могу передать это сообщение моему сценарию, например, должен быть введен заголовок.Потому что я получаю сообщения из файла ресурсов JSF.Если я жестко закодировал значения для jQuery (JavaScript), то моя локализация произвела.Вот почему я так поступаю.
Но я хочу спросить, правильно ли я это делаю?Или есть лучший подход, который я могу использовать для генерации errorScript.Я должен использовать этот диалог.Означает, что мой скрипт должен быть вызван.
Спасибо