Excepetion in Tomcat 7+Seam3 project.
hantsy Jul 28, 2011 11:21 PMjavax.el.PropertyNotFoundException: /resetPassword.xhtml @26,94 value="#{resetPasswordAction.resetPwdEmail}": Target Unreachable, identifier 'resetPasswordAction' resolved to null at com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:100) at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getConvertedValue(HtmlBasicInputRenderer.java:95) at javax.faces.component.UIInput.getConvertedValue(UIInput.java:1030) at javax.faces.component.UIInput.validate(UIInput.java:960) at javax.faces.component.UIInput.executeValidate(UIInput.java:1233) at javax.faces.component.UIInput.processValidators(UIInput.java:698) at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214) at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214) at javax.faces.component.UIForm.processValidators(UIForm.java:253) at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214) at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214) at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1172) at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76) at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.jboss.seam.servlet.exception.CatchExceptionFilter.doFilter(CatchExceptionFilter.java:65) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.jboss.seam.servlet.event.ServletEventBridgeFilter.doFilter(ServletEventBridgeFilter.java:72) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:403) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:301) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:162) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662)
The resetPassword.xhtml code:
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:s="http://jboss.org/seam/faces" xmlns:p="http://java.sun.com/jsf/composite/components/property" template="/WEB-INF/templates/default.xhtml"> <ui:define name="content"> <div class="section"> <h1>Reset Your Password</h1> </div> <div class="section"> <div class="errors"><h:messages id="messages" globalOnly="true" /> </div> <h:form id="pwdForm" prependId="false"> <fieldset> <p:input id="current" label="Eamil"> <h:inputText id="input" value="#{resetPasswordAction.resetPwdEmail}"> <f:validator validatorId="emailExistenceValidator" /> </h:inputText> </p:input> <div class="buttonBox"><h:commandButton id="change" value="Change" action="#{resetPasswordAction.resetPassword}" /> #{' '} <h:button id="cancel" value="Cancel" outcome="/index.xhtml" /></div> </fieldset> </h:form> </div> </ui:define> <ui:define name="sidebar"> <div class="content"> <h1>Simple things should be easy</h1> <p>(And so should some complex things.) You shouldn't have to write four different classes just to change a password. Traditional J2EE architectures require that developers spend more time writing code to make the frameworks happy, than they ever get to spend writing code to make the user happy. Seam lets you reduce the size of your code dramatically. And that reduces bugs. And it makes refactoring easier. And it makes delivering new functionality quicker. Productivity matters. But with Seam, JSF, EJB 3.0 and jBPM, you don't need to sacrifice the ability to handle complex problems just to achieve great productivity.</p> </div> </ui:define> </ui:composition>
RestPasswordAction
@Named(value = "resetPasswordAction") @SessionScoped public class ResetPasswordAction implements Serializable { @Inject private Instance<MailMessage> mailMessage; @Inject private ResourceProvider resourceProvider; @Inject private Instance<TemplateCompiler> templateCompiler; @Inject private Instance<Session> session; @NotNull @Email private String resetPwdEmail; @Inject UserService userService; @Inject Messages messages; public String getResetPwdEmail() { return resetPwdEmail; } public void setResetPwdEmail(String resetPwdEmail) { this.resetPwdEmail = resetPwdEmail; } @Transactional() public void resetPassword() { User user = userService.findUserByEmail(resetPwdEmail); String newPassword = "2222cc"; user.setPassword(newPassword); try { sendNewPassword(user.getUsername(), newPassword); } catch (MalformedURLException ex) { Logger.getLogger(ResetPasswordAction.class.getName()).log(Level.SEVERE, null, ex); } messages.info(new DefaultBundleKey("account_passwordReset")).defaults("New password was sent to your email, please check it later."); } public void sendNewPassword(String user, String password) throws MalformedURLException { mailMessage.get().from("seam@test.test", "Bifincan.com").to(resetPwdEmail).subject("Reset Password").bodyHtml(new RenderTemplate(templateCompiler.get(), "reset-password.html.render")).put("username", user).put("password", password).importance(MessagePriority.HIGH).send(session.get()); } }
In tomcat console, more expcetion info like this:
[WARNING] [talledLocalContainer] 严重: Exception sending request initialized lif ecycle event to listener instance of class org.jboss.weld.environment.servlet.Li stener [WARNING] [talledLocalContainer] org.jboss.weld.context.ContextNotActiveExceptio n: WELD-001303 No active contexts for scope type javax.enterprise.context.Reques tScoped [WARNING] [talledLocalContainer] at org.jboss.weld.manager.BeanManagerImp l.getContext(BeanManagerImpl.java:667) [WARNING] [talledLocalContainer] at org.jboss.weld.bean.proxy.ContextBean Instance.getInstance(ContextBeanInstance.java:77) [WARNING] [talledLocalContainer] at org.jboss.weld.bean.proxy.ProxyMethod Handler.invoke(ProxyMethodHandler.java:87) [WARNING] [talledLocalContainer] at org.jboss.seam.transaction.EntityTran saction$Proxy$_$$_WeldClientProxy.isActive(EntityTransaction$Proxy$_$$_WeldClien tProxy.java) [WARNING] [talledLocalContainer] at org.jboss.seam.persistence.ManagedPer sistenceContextProxyHandler.closeAfterTransaction(ManagedPersistenceContextProxy Handler.java:148) [WARNING] [talledLocalContainer] at org.jboss.seam.persistence.ManagedPer sistenceContextProxyHandler.invoke(ManagedPersistenceContextProxyHandler.java:10 0) [WARNING] [talledLocalContainer] at $Proxy30.closeAfterTransaction(Unknow n Source) [WARNING] [talledLocalContainer] at org.jboss.seam.persistence.ManagedPer sistenceContextBeanLifecycle.destroy(ManagedPersistenceContextBeanLifecycle.java :145) [WARNING] [talledLocalContainer] at org.jboss.seam.persistence.ManagedPer sistenceContextBeanLifecycle.destroy(ManagedPersistenceContextBeanLifecycle.java :46) [WARNING] [talledLocalContainer] at org.jboss.seam.solder.bean.ImmutableB ean.destroy(ImmutableBean.java:92) [WARNING] [talledLocalContainer] at org.jboss.weld.context.ForwardingCont extual.destroy(ForwardingContextual.java:34) [WARNING] [talledLocalContainer] at org.jboss.weld.context.AbstractContex t.destroy(AbstractContext.java:156) [WARNING] [talledLocalContainer] at org.jboss.weld.context.AbstractContex t.destroy(AbstractContext.java:173) [WARNING] [talledLocalContainer] at org.jboss.weld.context.AbstractConver sationContext.deactivate(AbstractConversationContext.java:218) [WARNING] [talledLocalContainer] at org.jboss.weld.servlet.WeldListener.r equestDestroyed(WeldListener.java:125) [WARNING] [talledLocalContainer] at org.jboss.weld.servlet.api.helpers.Fo rwardingServletListener.requestDestroyed(ForwardingServletListener.java:42) [WARNING] [talledLocalContainer] at org.apache.catalina.core.StandardCont ext.fireRequestDestroyEvent(StandardContext.java:6006) [WARNING] [talledLocalContainer] at org.apache.catalina.core.StandardCont extValve.invoke(StandardContextValve.java:172) [WARNING] [talledLocalContainer] at org.apache.catalina.authenticator.Aut henticatorBase.invoke(AuthenticatorBase.java:462) [WARNING] [talledLocalContainer] at org.apache.catalina.core.StandardHost Valve.invoke(StandardHostValve.java:164) [WARNING] [talledLocalContainer] at org.apache.catalina.valves.ErrorRepor tValve.invoke(ErrorReportValve.java:100) [WARNING] [talledLocalContainer] at org.apache.catalina.valves.AccessLogV alve.invoke(AccessLogValve.java:563) [WARNING] [talledLocalContainer] at org.apache.catalina.core.StandardEngi neValve.invoke(StandardEngineValve.java:118) [WARNING] [talledLocalContainer] at org.apache.catalina.connector.CoyoteA dapter.service(CoyoteAdapter.java:403) [WARNING] [talledLocalContainer] at org.apache.coyote.http11.Http11Proces sor.process(Http11Processor.java:301) [WARNING] [talledLocalContainer] at org.apache.coyote.http11.Http11Protoc ol$Http11ConnectionHandler.process(Http11Protocol.java:162) [WARNING] [talledLocalContainer] at org.apache.tomcat.util.net.JIoEndpoin t$SocketProcessor.run(JIoEndpoint.java:309) [WARNING] [talledLocalContainer] at java.util.concurrent.ThreadPoolExecut or$Worker.runTask(ThreadPoolExecutor.java:886) [WARNING] [talledLocalContainer] at java.util.concurrent.ThreadPoolExecut or$Worker.run(ThreadPoolExecutor.java:908) [WARNING] [talledLocalContainer] at java.lang.Thread.run(Thread.java:662)
I haved tried Conversation scope and request code on ResetPasswordAction, it does not work.