<ui:composition template="/WEB-INF/templates/base.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<ui:define name="metadata">
<f:metadata>
<f:event type="preRenderView" listener="#{resetPassword.loadUser}" />
<f:viewParam name="user" value="#{resetPassword.user}" />
</f:metadata>
</ui:define>
<ui:define name="content">
<h:form rendered="#{resetPassword.user != null}">
<h:panelGrid class="form_panel" columns="2" width="596px">
<h:outputLabel class="form_label" for="password" value="#{base['resetPassword.password']}" />
<h:inputSecret class="form_inputText" id="password" value="#{resetPassword.password}">
<f:ajax event="keyup" execute="password" listener="#{resetPassword.validatePassword}" render="scorePanel complexity" />
</h:inputSecret>
(...) // Other labels and inputfields, no ajax
</h:panelGrid>
</h:form>
</ui:define>
</ui:composition>
-callspreRenderView
と組み合わせた場合の多くの問題について読みました。ajax
私が遭遇した主な問題は問題ですがpostback
、私の場合は、でまったく起動しajax
ませんpreRenderView
。タグ全体がないf:event
と、私のajax
呼び出しは正しく機能します。
resetPassword.loadUser()
resetPassword.user
nullではないを設定します。を埋めるために、のpreRenderView
代わりにを使用する必要があります。このパラメータは、フォームが送信されるときに必要です。@PostConstruct
f:viewParam
が定義されているajax
ときにイベントが中断するのはなぜですか?<f:event type="preRenderView" />
注:<ui:insert name="metadata" />
テンプレート内は。内にあり<h:head>
ます。
アップデート
BalusCがコメントしたように、この問題はコードのこの部分には表示されません。
public void loadUser(ComponentSystemEvent event) {
if(!FacesContext.getCurrentInstance().isPostback()) {
user = (hash != null) ? userService.getByIdAndPwdResetHash(userId, hash) : null;
}
}
このコードは返される可能性がありますが、返さnull
れません(フォームがロードされているため)。
public void validatePassword(AjaxBehaviorEvent event) {
System.out.println("Ajax works"); // Just for testing purposes so far
}
これはほとんどすべての関連コードであるため、さらに何を追加すればよいかわかりません。