Hi all, I'm currently setting up Seam in an already working JSF based project. There is a hack that I wrote to call an action to init a bean when invoking a JSF page from a non-JSF servlet. I'm trying to replace it by a @Factory method but I'm really struggling here.
I'm running JSF on Resin web server using MyFaces implementation. I followed the setup instructions at chapter 21 of Seam documentation (http://docs.jboss.com/seam/1.2.1.GA/reference/en/html/configuration.html) and the bean is super simple, heavily inspired by the example found at: http://java.sys-con.com/read/180363.htm Now my problem is that the @Factory method is never called and the server fails badly, giving me a blank page and throwing an ugly exception on the console: | javax.servlet.ServletException: Could not retrieve value of component with path : {Component-Path : [Class: javax.faces.component.UIViewRoot,ViewId: /faces/dataview/news.jsp][Class: javax.faces.component.html.HtmlOutputText,Id: date]} | at javax.faces.webapp.FacesServlet.service(FacesServlet.java:154) | at com.caucho.server.dispatch.ServletFilterChain.doFilter(ServletFilterChain.java:106) | at com.caucho.server.webapp.DispatchFilterChain.doFilter(DispatchFilterChain.java:115) | at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:229) | at com.caucho.server.webapp.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:277) | at com.caucho.server.webapp.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:106) | at com.firstline.report.WebActionHandler.sendJSFPage(WebActionHandler.java:190) | at com.firstline.report.WebActionHandler.sendPage(WebActionHandler.java:110) | at com.firstline.report.WebActionHandler.service(WebActionHandler.java:89) | at com.firstline.report.WebActionHandler.service(WebActionHandler.java:36) | at com.firstline.servlet.IServer.doGet(IServer.java:106) | at javax.servlet.http.HttpServlet.service(HttpServlet.java:689) | at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) | at com.caucho.server.dispatch.ServletFilterChain.doFilter(ServletFilterChain.java:106) | at org.jboss.seam.web.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:63) | at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45) | at org.jboss.seam.web.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:49) | at org.jboss.seam.web.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:53) | at org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:79) | at org.jboss.seam.web.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:49) | at org.jboss.seam.web.SeamFilter.doFilter(SeamFilter.java:84) | at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:70) | at com.firstline.servlet.filter.PersistenceSessionFilter.doFilter(PersistenceSessionFilter.java:34) | at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:70) | at com.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:173) | at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:229) | at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:274) | at com.caucho.server.port.TcpConnection.run(TcpConnection.java:511) | at com.caucho.util.ThreadPool.runTasks(ThreadPool.java:520) | at com.caucho.util.ThreadPool.run(ThreadPool.java:442) | at java.lang.Thread.run(Thread.java:595) | My Bean : | package com.mobicom.presentation.bean.page; | | import java.io.Serializable; | import java.util.Date; | | import org.jboss.seam.ScopeType; | import org.jboss.seam.annotations.Factory; | import org.jboss.seam.annotations.In; | import org.jboss.seam.annotations.Name; | import org.jboss.seam.annotations.Out; | import org.jboss.seam.annotations.Scope; | | import com.mobicom.model.bo.Language; | import com.mobicom.model.bo.News; | import com.mobicom.model.dao.LanguageDAO; | import com.mobicom.presentation.bean.application.SessionBean; | import com.mobicom.presentation.resources.text.TextResource; | import com.mobicom.presentation.util.MessageHandler; | import com.mobicom.presentation.util.TextKey; | import com.mobicom.service.NewsService; | | @Name("newsBean") | @Scope(ScopeType.SESSION) | public class NewsBean implements Serializable { | | private static final long serialVersionUID = 1L; | @In | ToolbarBean toolbarBean; | @In | SessionBean sessionBean; | @Out | Date postDate; | @Out | String postText; | | public String process(){ | | try { | // update toolbar | toolbarBean.setCurrentReport(ToolbarBean.CURRENT_REPORT_NOT_SET); | toolbarBean.setPrinterFriendlyPath("/dynamic/faces/dataview/newsPF.jsf"); | toolbarBean.setShowExportToExcel(false); | toolbarBean.setReportName(TextResource.getTextResourceString(new TextKey("News"),null,sessionBean.getCurrentLocale())); | toolbarBean.setRefreshAction("newsBean.process"); | | Language language = LanguageDAO.getInstance().findByPk(sessionBean.getLanguageCode()); | News news = NewsService.getInstance().findCurrentNews(); | postDate = news.getNewsTime(); | postText = news.getNewsDescription().getText(language); | | } catch (Exception ex){ | MessageHandler.handleGenericException(ex); | return "error"; | } | | return "success"; | } | | @Factory("postDate") | public void myFactory(){ | process(); | } | | public ToolbarBean getToolbarBean() { | return toolbarBean; | } | | public void setToolbarBean(ToolbarBean toolbarBean) { | this.toolbarBean = toolbarBean; | } | | public SessionBean getSessionBean() { | return sessionBean; | } | | public void setSessionBean(SessionBean sessionBean) { | this.sessionBean = sessionBean; | } | | public String getPostText() { | return postText; | } | | public void setPostText(String newsData) { | this.postText = newsData; | } | | public Date getPostDate() { | return postDate; | } | | public void setPostDate(Date postDate) { | this.postDate = postDate; | } | | } | And my page: | <%@ taglib uri="/WEB-INF/taglib/myfaces_html.tld" prefix="h"%> | <%@ taglib uri="/WEB-INF/taglib/myfaces_core.tld" prefix="f"%> | <%@ taglib uri="/WEB-INF/taglib/tomahawk.tld" prefix="t"%> | | <f:view locale="#{sessionBean.currentLocale}"> | | <f:loadBundle basename="com.mobicom.presentation.resources.text.TextResource" var="text"/> | | <jsp:include page="/inc/page-top-1.jsp"/> | <!-- window title --> | <h:outputText id="pageTitle" value="<title>#{text['News']}</title>" escape="false"/> | <jsp:include page="/inc/page-top-2.jsp"/> | <jsp:include page="/inc/main-header.jsp"></jsp:include> | | <jsp:include page="/faces/dataview/debugInfo.jsp"/> | | <div class="content"> | | <jsp:include page="/inc/toolbar.jsp"/> | | <div class="container"> | | <h:form id="newsForm"> | <table class="standardForm" style="width: 100%;"> | <tr> | <th><h:outputText id="dateLabel" value="#{text['Date']}"/></th> | <th><h:outputText id="newsLabel" value="#{text['News']}" escape="false"/></th> | </tr> | <tr> | <td style="text-align: center; width: 100; font-weight: normal; background-color: #F7F7FB; "> | <h:outputText id="date" value="#{newsBean.postDate}" escape="false"> | <f:convertDateTime pattern="yyyy-MM-dd" timeZone="#{sessionBean.timeZone}"/> | </h:outputText> | </td> | <td style="text-align: center; font-weight: normal; background-color: #F7F7FB;"> | <h:outputText id="text" value="#{newsBean.postText}" escape="false"/> | </td> | </tr> | </table> | <table class="dataTableFooter" style="width: 100%;"> | <tr> | <td> | <h:commandLink id="reloadLink" action="#{newsBean.process}"> | <h:outputText id="reloadLinkLabel" value="#{text['Reload']}"/> | </h:commandLink> | </td> | </tr> | </table> | </h:form> | </div><!-- end div: container --> | | </div><!-- end div: content --> | | <jsp:include page="/inc/main-footer.jsp"/> | <jsp:include page="/inc/page-bottom.jsp"/> | | </f:view> | Thanks for helping! Math View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4046203#4046203 Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4046203 _______________________________________________ jboss-user mailing list [email protected] https://lists.jboss.org/mailman/listinfo/jboss-user
