7
votes

I went through different sources like:

and it seems to be issue has been fixed in jsf 2.2.1, where as When I tried to use, I am facing issue, below are my configurations:

template.xhtml:

<!DOCTYPE html>
<html lang="#{languageBean.language}"
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://xmlns.jcp.org/jsf/core"
    xmlns:h="http://xmlns.jcp.org/jsf/html"
    xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
    xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
    xmlns:fn="http://xmlns.jcp.org/jsp/jstl/functions"
    xmlns:p="http://primefaces.org/ui" xmlns:o="http://omnifaces.org/ui"
    xmlns:of="http://omnifaces.org/functions">
<!-- Enables CTRL+SHIFT+D for activating Facelets debug window -->
<ui:debug />
<f:view locale="#{languageBean.language}" encoding="UTF-8" contentType="text/html">
<!-- Client templates can insert f:metadata here, and this will NOT show up in the showcase page source code -->
<ui:insert name="meta" />

<c:set var="contextPath" value="${pageContext.request.contextPath}"
    scope="application" />
<f:loadBundle var="messageResource" basename="MessageResource" />
<h:head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
    <meta http-equiv="X-UA-Compatible"
        content="EmulateIE8,IE=edge,chrome=1" />
    <meta http-equiv="pragma" content="no-cache" />
    <meta http-equiv="cache-control" content="no-cache" />
    <meta http-equiv="expires" content="0" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta name="description" content="Connect" />
    <meta name="keywords"
        content="timeline, 3d, css, css3, css-only, transitions, responsive, fluid" />
    <meta name="author" content="FriendsMirror" />
    <link rel="shortcut icon"
        href="#{request.contextPath}/Friendsmirror.ico" />
    <ui:insert name="js"/>  
    <h:outputStylesheet library="css" name="common.css" />
    <h:outputStylesheet library="css" name="main.css" />
    <ui:insert name="css"/>

    <ui:insert name="onloadScript"/>
    <title><ui:insert name="title">#{messageResource['connect.main.title.main.title']}</ui:insert></title>
</h:head>
<h:body>
<ui:insert name="content" />
</h:body>
</f:view>
</html>

Page:

<ui:composition template="/WEB-INF/templates/discussion_layout.xhtml"
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://xmlns.jcp.org/jsf/core"
    xmlns:h="http://xmlns.jcp.org/jsf/html"
    xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
    xmlns:c="http://xmlns.jcp.org/jsp/jstl/core">

    <ui:define name="meta">
        <f:metadata>
            <f:viewParam name="sessionKey" value="#{discussionWrapperBean.sessionKey}" />
            <f:viewParam name="ref" value="#{discussionWrapperBean.ref}" />
            <f:viewParam name="pId" value="#{discussionWrapperBean.pId}" />
            <f:viewParam name="dId" value="#{discussionWrapperBean.discussionId}" />
            <f:viewParam name="dName" value="#{discussionWrapperBean.discussionName}" />
            <f:viewAction action="#{discussionWrapperBean.loadInitDiscussion}" onPostback="false" />
        </f:metadata>
    </ui:define>

    <ui:define name="title">
        <ui:fragment rendered="#{discussionWrapperBean.profileId != null}">
            #{discussionWrapperBean.userBean.firstName} #{discussionWrapperBean.userBean.lastName != null ? discussionWrapperBean.userBean.lastName: ''}#{discussionWrapperBean.pageTitleNotifications != null ? '(' : ''}#{discussionWrapperBean.pageTitleNotifications != null ? discussionWrapperBean.pageTitleNotifications : ''}#{discussionWrapperBean.pageTitleNotifications != null ? ')' : ''}
        </ui:fragment>
        <ui:fragment rendered="#{discussionWrapperBean.profileId == null}">
            #{messageResource['connect.discussion.title']}
        </ui:fragment>
    </ui:define>

    <ui:define name="content">

    </ui:define>

</ui:composition>

Maven:

<jsf.version>2.2.1</jsf.version>

<dependency>
    <groupId>com.sun.faces</groupId>
    <artifactId>jsf-api</artifactId>
    <version>${jsf.version}</version>
    <scope>provided</scope>
</dependency>

<dependency>
    <groupId>com.sun.faces</groupId>
    <artifactId>jsf-impl</artifactId>
    <version>${jsf.version}</version>
    <scope>provided</scope>
</dependency>

In Ui I am getting issue like:The metadata component needs to be nested within a f:metadata tag. Suggestion: enclose the necessary components within <f:metadata>

even its not calling the <f:viewAction>

Any Suggestion or help will be appreciated.

One thing I noticed during deployment: INFO: Initializing Mojarra 2.2.0 ( 20130502-2118 https://svn.java.net/svn/mojarra~svn/tags/2.2.0@11930) for context /connectWAR

I am not sure why this is telling Mojarra 2.2.0, even though I have upgraded to 2.2.1

1
At the time when I posted the answer, the reported fix was for 2.2.1 but when I checked back the link the issue is still open and now the reported fix is for 2.2.2. I'm still getting this issue with JSF 2.2.1 from time to time so you're not alone. If the message bothers you that much then change the project stage. As for f:viewAction I haven't tried it since. I'll try again.Andy
Thank you Andy...warning message can be ignored, but can't able to make work with <f:viewAction>, if you have any alternative rather than postConstruct will be helpful.Jayaram
What are you using ? GlasshFish ?Andy
@Andy Tomcat and tried with jboss6.x as wellJayaram
Apologies for the late reply, I was getting familiar with f:viewActions and running some test. With JSF 2.2.1 I was able to get it working on a smaller sample. I'm also not seeing the warning message. So maybe your project is not pointing to the latest JSF version but I'm no expert at fixing this. Here's one link I would recommend stackoverflow.com/questions/4441713/…Andy

1 Answers

6
votes

As to the false UI warning, this is caused by Mojarra issue 2868 and already fixed since 2.2.1.

As to the <f:viewAction> still not working on 2.2.1, another Mojarra bug with the since Java EE 7 introduced xmlns.jcp.org XML namespace domain is causing this trouble. In specifically Mojarra versions 2.2.0 and 2.2.1 the new XML namespace domain is not properly registered for all new JSF 2.2 specific tags which didn't exist in JSF 2.0/2.1, such as <f:viewAction>. In effects, the xmlns.jcp.org will give you in Mojarra 2.2.0/2.2.1 only the JSF 2.1 compatible tags back. This totally explains why the new JSF 2.2 <f:viewAction> didn't work for you.

You have 2 options:

  1. Use the "old" java.sun.com XML namespace domain instead. The new JSF 2.2 specific tags are properly registered there.

  2. Upgrade to at least Mojarra 2.2.2. This peculiar bug is fixed since that version. Mojarra is currently already at 2.2.4.