PrimeFaces 5.0, JSF 2.2, Glassfish 4.1.1,
Я предполагаю, что что-то в моей настройке настроено неправильно, но я не уверен, на что смотреть...
Поэтому я использую управляемые компоненты для поддержки страниц JSF. В элементах PrimeFace на странице, если я использую свойство oncomplete, метод, на который оно ссылается, вызывается при загрузке страницы. Я не хочу, чтобы он вызывал метод при каждой загрузке страницы, и я не думаю, что это должно быть!
Я проверил это на нескольких страницах и в разных элементах. Впервые я заметил эту проблему с элементом <p:fileupload>
, где я пытался вызвать метод, используя oncomplete, как только все файлы были загружены. Впоследствии я попробовал это на <p:commandbuttons>
, и oncomplete вызывается при загрузке страницы.
Я проверил полученный HTML и обнаружил правильно отформатированную пару тегов <head>
.
Я также выполнил сравнение сгенерированного HTML с наличием свойства oncomplete и без него.
С участием:
<button id="j_idt21:j_idt26"
name="j_idt21:j_idt26"
class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only"
onclick="PrimeFaces.ab({s:'j_idt21:j_idt26',onco:function(xhr,status,args){;}});
return false;"
type="submit">`
Без:
<button id="j_idt21:j_idt26"
name="j_idt21:j_idt26"
class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only"
onclick="PrimeFaces.ab({s:'j_idt21:j_idt26'});
return false;"
type="submit">
Вот код приведенного выше HTML, показывающий, что oncomplete вызывает метод на любой странице при ее загрузке. Это моя страница входа.
<p:commandButton validateClient="true" value="Login"
action="#{loginJSFManagedBean.validateCredentials}"
type="submit"
ajax="true"
oncomplete="#{loginJSFManagedBean.validateCredentials}">
</p:commandButton>
Каждый раз, когда загружается страница входа, вызывается метод validateCredentials, даже до того, как страница завершит рендеринг...
вот фрагмент моего JSF для загрузки моего файла:
<h:form enctype="multipart/form-data">
<p:fileUpload oncomplete="#{JSFManagedBean.extract()}"
fileUploadListener="#{JSFManagedBean.handleTarFileUpload}"
mode="advanced" ></p:fileUpload>
</h:form>
Каждый раз, когда страница загружается, вызывается метод extract()...