在某些情况下渲染f:viewAction

时间:2015-04-19 16:05:53

标签: jsf nullpointerexception jsf-2.2

我有一个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>

当用户点击链接时,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

如何在不调用home的情况下从login页面转到booksBean.selectBook()页面?

2 个答案:

答案 0 :(得分:2)

您可以通过指定f:viewAction条件来有选择地调用if。在您的情况下,您似乎只想在回发时执行操作,在这种情况下,您可以:

  <f:viewAction action="#{booksBean.selectBook()}" if="#{facesContext.postBack}"/>

相关:

答案 1 :(得分:0)

以下是不使用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>