我要描述的可能是那些熟悉JSF阶段周期的人的预期行为,但对我来说这并不明显,所以我要求确认。 在JSF页面中,我为prerenderview事件设置了一个监听器。 该页面由于jsf-forward而处理。监听器未被执行。 如果我通过其URL直接访问页面(执行GET),则执行侦听器。 我的代码有问题或者这是正确的行为吗? 我在互联网上搜索了很多,但没有找到任何有用的东西。
更新 正如我在评论中所说,我跳到了错误的结论。我所描述的不是一般行为,而是由于错误或更复杂的情况而导致的特殊情况。
更新2 经过进一步调查后,我得出了这样的结论:问题似乎与将preRenderView监听器放在使用模板的页面中的错误方法有关。不幸的是,它在某些情况下有效,而在其他情况下无效。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org /TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html 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.prime.com.tr/ui">
<f:metadata>
<f:event listener="#{permessitemporaneiController.preCreate}" type="preRenderView" />
</f:metadata>
<ui:composition template="/template.xhtml">
...
我应该在模板中创建一个插入区域,并将标记放在前面代码中的a中。
奇怪的是,使用'错误'代码时,使用GET请求正确调用侦听器,但不能使用jsf-forward。为什么??
由于 菲利普