<h/p:button outcome>
不打算调用 bean 操作方法,而是直接包含结果字符串。那里的任何 EL 都会立即作为值表达式进行评估。因此,当您打开包含<h/p:button>
.
在您的特定情况下,基本上有两种方法可以在导航上调用 bean 操作方法。如果您需要在导航发生之前调用它,并且不打算在最终用户每次重新打开/重新加载 GET 请求时重新调用该操作,则将其设为 POST-Redirect-GET 请求。这是faces-redirect=true
在查询字符串语法中添加结果值的问题。
例如
<p:commandButton action="#{bean.submit}" ... />
和
public String submit() {
// ...
return "nextpage?faces-redirect=true";
}
这样浏览器将在 POST 后重定向到目标页面,因此最终用户将看到目标 URL 反映在地址栏中。
或者,如果您需要在最终用户每次重新打开/重新加载 GET 请求时调用该操作,请preRenderView
改为在请求/视图范围的后备 bean 的 (post) 构造函数或侦听器方法中执行该工作。
例如
<p:button outcome="nextpage" ... />
和
@ManagedBean
@RequestScoped
public class NextpageBacking {
public NextpageBacking() {
// In constructor.
}
@PostConstruct
public void onPostConstruct() {
// Or in postconstructor (will be invoked after construction AND injection).
}
public void onPreRenderView() {
// Or before rendering the view (will be invoked after all view params are set).
}
// ...
}
预渲染视图监听方法需要在nextpage
<f:event type="preRenderView" listener="#{nextpageBacking.onPreRenderView}" />
也可以看看: