f:不调用viewAction

时间:2014-01-02 23:45:34

标签: java-ee jsf-2.2

我正在使用带有jsf 2.2的Glassfish 4,我在其中一个jsf页面中有以下代码:

<ui:composition template="resources/admin_layout.xhtml">
    <f:metadata>
        <f:viewParam name="bookId" value="#{bookController.bookId}"/>
        <f:viewAction action="#{bookController.findById}"/>
    </f:metadata>
    ...
</ui:composition>

问题是永远不会调用findById方法(我在那里添加了一个日志语句,没有打印任何内容,私有成员保持为空)。

通过以下方式从其他页面调用此页面:

<h:form>
    <h:button value="update" outcome="update_book.xhtml">
        <f:param name="bookId" value="#{book.id}"/>
    </h:button>
</h:form>

以下是BookController的简化代码:

@Model
public class BookController {
    @EJB
    private BookEjb be;
    @Inject
    private Logger logger;

    private Book book;
    private Long bookId;

    public Long getBookId() {
        return bookId;
    }

    public void setBookId(final Long id) {
        bookId = id;
    }

    public void findById() {
        book = be.findById(bookId);
        logger.log(Level.INFO, "Found book with title: {0}", book.getTitle());
    }
}

1 个答案:

答案 0 :(得分:7)

通过将名称空间从http://xmlns.jcp.org/jsf/更改为http://java.sun.com/jsf/

来解决此问题