- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
<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>
我已经阅读了关于 preRenderView
的很多问题结合 ajax
- 电话。我遇到的主要问题是 postback
问题。不过,就我而言,ajax
preRenderView
根本不会触发.无整f:event
-标签,我的ajax
-调用确实工作正常。
resetPassword.loadUser()
将设置 resetPassword.user
,这不是空的。我需要使用 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
}
我不知道要进一步添加什么,因为这几乎是所有相关代码。
最佳答案
此构造将在 #{resetPassword}
时失败是请求范围和 user
属性在 bean 的(后期)构造期间未初始化。
JSF 将在应用请求值阶段即重新评估 rendered
在处理提交的值之前输入组件(这也包括它的所有父组件)的属性,作为防止篡改请求的一部分。在您的情况下,不会呈现父表单,因此不会处理所有输入组件。
您基本上有 2 个选择:
制作 bean @ViewScoped
(或 CDI 等价物 @ConversationScoped
)。这样,只要您与同一 View 交互(相应对话),它就会一直存在。
执行 user
的初始化在(后)构造函数中。预渲染 View 为时已晚。由于您的 bean 已经在请求范围内,因此只需使用 @ManagedProperty
(或其本土 CDI 等价物;谷歌在“@HttpParam”上有结果)。
@HttpParam
注释作为 JSF 的 CDI 替代 @ManagedProperty
与具体问题无关,在 action(listener) 方法中执行验证不是正确的方法。而不是 <f:ajax listener>
, 使用正常 Validator
您通过输入组件的 validator
引用它属性或嵌套 <f:validator>
.
关于java - preRenderView 禁用ajax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13570301/
我有一个带有“显示更多结果”按钮的搜索结果页面。支持 bean 是 session 范围的,我们使用 preRenderView 在支持 bean 中执行搜索方法: “显示更多结果”按钮的定义如下:
我对 f:event type="preRenderView" 的执行顺序和次数有疑问. 在我在这里的搜索过程中,我在 this 中找到了 BalusC 的常规答案。和 this与我的问题相关的帖子
我的一个页面/bean 有它的 preRenderView事件在第一页加载时触发两次,然后 2 + n每次回发的次数,其中 n是已发生的回发数(包括当前回发数)。 在这里阅读了一些其他帖子后,我搬家了
我从 What can , and be used for? 开始 我有一个预渲染 View 事件监听器: 它调用以下方法: public String performWeakLog
与使用 viewAction 相比,什么时候应该使用 preRenderView 事件来初始化页面的数据?它们在使用上是否相同并且它们具有相同的效果? preRenderView 事件 或者
我的 Mojarra 2.1.6 Web 应用程序有问题,我正在使用 @ViewScoped 开发它托管 bean,每个 bean 都附加到一个 xhtml 页面。此页面正在接收一些 View 参数,
有没有办法用 ajax 更新 preRenderView 组件? 一些例子: // some code here
我有以下片段: Simple JSF Facelets page Hello, Place your content here 当我打开页面时,Workf
什么时候应该使用 f:viewAction 或 preRenderView 事件来初始化页面数据,而不是使用 @PostConstruct 注释?是否根据支持 bean 的范围类型使用其中一种或另一种
我正在使用 f:metadata 元素中的预渲染 View 事件从另一个页面调用页面。 如果我使用 导航到页面它工作并调用监听器方法。 但是,如果我使用属于调用页面的托管 bean 的操作方法的结果
我正在用 jsf 2.0 做一个页面,我想做这样的事情: ....(Some code).... #{var.something} 方法 initPage(id)
进行回发时是否可以“禁用”触发此操作? 最佳答案 是不可能的。需要手动查看 FacesContext#isPostback() 在监听器方法内。 public void init()
我的 jsf xhtml 页面中有以下内容: 我需要在 preRenderView 执行后显示模态对话框。而且
我正在尝试使用动态验证组 然而,#{bean.validationGroup} 总是在 之前被调用 这是 Myfaces 中的错误吗?我需要在 prerenderview 之后
Mojarra-2.1.3 按照 Glassfish3.1.1(与 Netbeans7.1 一起分发) 我有一个 @SessionScoped 支持 bean 跟踪器,带有一个监听器 void res
我在 处遇到了一些麻烦导致我的所有按钮(默认类型,而不是 type="button"> 调用相同的 bean 方法,特别是 decryptionBean.readAllBoards 。以下是我认为代
我正在尝试使用 检查每个 View 的身份验证 标签。 该机制有效,但外观已损坏,似乎缺少一些 CSS。当我取消选中时,我的页面会正常显示。 这是我的一个观点,其中检查身份验证: ...
我正在尝试开发一项服务。 重点是我的 index.xhtml 应该从 HTTP 请求中获取参数(POST 和 GET)和 cookie。 我尝试与 结合使用和 像这样: deCon
所以我们有一个 f:event: 在初始页面加载(渲染)时根据需要触发。 然而,这个 preRenderView 事件也由 ajax 部分页面渲染触发,它重新渲染一个带有 i
我是一名优秀的程序员,十分优秀!