在某些情况下渲染 f:viewAction
Render f:viewAction in some cases
我有一个 home
页面:
<f:metadata>
<f:viewAction action="#{booksBean.selectBook()}"/>
</f:metadata>
<h:head>
<title>home</title>
</h:head>
<h:body>
...
<h:link >
<h:graphicImage name="images/books/s1.jpg" />
<f:param name="isbn" value="25413652" />
</h:link>
...
</h:body>
当用户点击 link 时,isbn
值已正确发送到 booksBean.selectBook()
。
但问题是当用户从 login
页面导航到 home
页面时,
这里是 userBean.login()
:
public String login() {
if (loginSuccessfully) {
return "home?faces-redirect=true"; // problem
} else {
//show error message
}
}
问题出在提到的部分,当用户移动到 home.xhtml
时,booksBean.selectBook()
会自动调用,因为它还为空,所以我得到 NullPointerException
.
如何在不调用 booksBean.selectBook()
的情况下从 login
页面转到 home
页面?
这是不使用 f:viewaction
的解决方案
<h:commandButton value="optional value" action="#{booksBean.selectBook()}">
<f:param name="isbn" value="25413652"></f:param>
<f:ajax execute="@form" render="@form"></f:ajax>
</h:commandButton>
您可以通过指定 if
条件来选择性地调用 f:viewAction
。在您的情况下,您似乎只想在回发时执行操作,在这种情况下,您可以:
<f:viewAction action="#{booksBean.selectBook()}" if="#{facesContext.postBack}"/>
相关:
- When to use preRenderView versus viewAction?
我有一个 home
页面:
<f:metadata>
<f:viewAction action="#{booksBean.selectBook()}"/>
</f:metadata>
<h:head>
<title>home</title>
</h:head>
<h:body>
...
<h:link >
<h:graphicImage name="images/books/s1.jpg" />
<f:param name="isbn" value="25413652" />
</h:link>
...
</h:body>
当用户点击 link 时,isbn
值已正确发送到 booksBean.selectBook()
。
但问题是当用户从 login
页面导航到 home
页面时,
这里是 userBean.login()
:
public String login() {
if (loginSuccessfully) {
return "home?faces-redirect=true"; // problem
} else {
//show error message
}
}
问题出在提到的部分,当用户移动到 home.xhtml
时,booksBean.selectBook()
会自动调用,因为它还为空,所以我得到 NullPointerException
.
如何在不调用 booksBean.selectBook()
的情况下从 login
页面转到 home
页面?
这是不使用 f:viewaction
<h:commandButton value="optional value" action="#{booksBean.selectBook()}">
<f:param name="isbn" value="25413652"></f:param>
<f:ajax execute="@form" render="@form"></f:ajax>
</h:commandButton>
您可以通过指定 if
条件来选择性地调用 f:viewAction
。在您的情况下,您似乎只想在回发时执行操作,在这种情况下,您可以:
<f:viewAction action="#{booksBean.selectBook()}" if="#{facesContext.postBack}"/>
相关:
- When to use preRenderView versus viewAction?