I am using Jetbrains Intellij idea 12.
When deploying jsf2.2 to tomcat 7 server, the RequestScoped login bean
does not always work.
If i declare its scope not as an annotation but instead in the web.xml
it works fine.
Changing it to @ViewScoped fix it, but i do not like this fix because
@RequestScoped need to work fine anyway
Here is my code:
login.xhtml:
------------------
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="
http://www.w3.org/1999/xhtml"
xmlns:h="
http://java.sun.com/jsf/html"
xmlns:f="
http://java.sun.com/jsf/core"
xmlns:t="
http://myfaces.apache.org/tomahawk"
xmlns:a4j="
http://richfaces.org/a4j"
xmlns:ui="
http://java.sun.com/jsf/facelets"
xmlns:rich="
http://richfaces.org/rich">
<!--
<f:view encoding="UTF-8" contentType="text/html">
-->
<h:head>
<ui:include src="inc_head.xhtml" />
<script type="text/javascript" src="js/button.js"></script>
<link rel="stylesheet" href="css/tinybox.css" type="text/css" />
<script type="text/javascript" src="js/tinybox.js"></script>
</h:head>
<h:body>
<script type="text/javascript">
initClient.push(
function() {
initTableButtons();
}
);
function autoLogin(event)
{
if (event.keyCode == 13)
{
document.getElementById('btnLogin').onclick();
}
}
</script>
<h:form id="formLogin">
<h:inputHidden id="mode" value="#{login.mode}" forceId="true" />
<h:inputHidden id="confirmationCode" value="#{login.confirmationCode}"
forceId="true" />
<h:inputHidden id="nextUrl" value="#{login.next}" forceId="true" />
<rich:focus for="username" rendered="#{login.mode == 'login'}" />
<rich:focus for="usernameForgot" rendered="#{login.mode ==
'forgot_password'}" />
<rich:focus for="resetPassword" rendered="#{login.mode ==
'reset_password'}" />
<table width="100%" cellpadding="0" cellspacing="0">
<tr>
<td align="center" valign="top">
<table width="90%" border="0" cellpadding="0" cellspacing="0">
<!--logos-->
<tr class="headheightlogin">
<td align="center" valign="top">
<table cellpadding="0" cellspacing="0">
<tr>
<td><img src="images/pix.gif" width="1" height="32"
alt=""/></td>
</tr>
<tr>
<td align="center" valign="top">
<a href="
http://www.todacell.com"
style="text-decoration:none;">
<img src="images/general/logo_todacell.gif"
style="vertical-align:middle;" alt=""/>
</a>
</td>
<td>
<div style="height:10px;">
<a href="
http://www.todacell.com"
style="text-decoration:none;">
<span id="slogan">Smartphone Ad
Network</span>
</a>
</div>
</td>
</tr>
</table>
</td>
</tr>
<!--end logos-->
<!--top_tabs-->
<tr>
<td align="left" valign="top">
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="430">
<table width="430" border="0" cellspacing="0"
cellpadding="0">
<tr>
<td height="65" class="titleEmpty">
<div
style="margin-top:12px;"><h:outputText
value="#{bundle['login.login']}"/></div>
</td>
</tr>
</table>
</td>
<td width="100%" align="right" valign="bottom"
class="bg_top_tabs">
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<!-- <h:panelGroup
rendered="#{login.language != 'ja_JP'}">
<td class="bg_tab_grey_left">
<h:outputLink
value="login_lang.jsp" styleClass="taboff">
<f:param name="lang"
value="ja_JP"/>
<h:outputText value="日本語"/>
</h:outputLink>
</td>
<td class="bg_tab_grey_right"
width="5">
<img src="images/pix.gif" width="5"
height="1"/>
</td>
</h:panelGroup>
<h:panelGroup rendered="#{login.language ==
'ja_JP'}">
<td class="bg_tab_or_left tabon">
日本語
</td>
<td class="bg_tab_or_right" width="5">
<img src="images/pix.gif" width="5"
height="1"/>
</td>
</h:panelGroup> -->
<h:panelGroup rendered="#{login.language !=
'en_US'}">
<td class="bg_tab_grey_left">
<h:outputLink
value="login_lang.jsp" styleClass="taboff">
<f:param name="lang"
value="en_US"/>
<h:outputText value="English"/>
</h:outputLink>
</td>
<td class="bg_tab_grey_right"
width="5">
<img src="images/pix.gif" width="5"
height="1" alt=""/>
</td>
</h:panelGroup>
<h:panelGroup rendered="#{login.language ==
'en_US'}">
<td class="bg_tab_or_left tabon">
English
</td>
<td class="bg_tab_or_right" width="5">
<img src="images/pix.gif" width="5"
height="1" alt=""/>
</td>
</h:panelGroup>
</tr>
<tr>
<td colspan="4"><img src="images/pix.gif"
width="1" height="9" alt=""/></td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<!--end top_tabs-->
<tr>
<td class="bg_gr3">
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><img src="images/pix.gif" width="1" height="25"
alt=""/></td>
</tr>
<tr>
<td colspan="5" align="left" valign="top">
<table width="100%" border="0" cellpadding="0"
cellspacing="0">
<tr>
<td><img src="images/pix.gif" width="23"
height="1" alt=""/></td>
<td width="100%">
<table width="100%" cellpadding="0"
cellspacing="0">
<tr>
<td width="18"><img
src="images/general/corner_top_left.gif" width="18"
height="15"
alt=""/></td>
<td width="100%"
class="bg_white"><img src="images/pix.gif" alt=""/></td>
<td width="18"><img
src="images/general/corner_top_right.gif" width="18"
height="15"
alt=""/></td>
</tr>
</table>
</td>
<td><img src="images/pix.gif" width="23"
height="1" alt=""/></td>
<td width="325" align="left" valign="top">
<table width="325" cellpadding="0"
cellspacing="0">
<tr>
<td width="18"><img
src="images/general/corner_top_left.gif" width="18"
height="15"
alt=""/></td>
<td width="100%"
class="bg_white"><img src="images/pix.gif" alt=""/></td>
<td width="18"><img
src="images/general/corner_top_right.gif" width="18"
height="15"
alt=""/></td>
</tr>
</table>
</td>
<td><img src="images/pix.gif" width="23"
height="1" alt=""/></td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<img src="images/pix.gif" width="23" alt=""/>
</td>
<td width="100%" align="center" valign="middle"
class="bg_white">
<img src="images/general/login.gif"
style="padding-top:20px; padding-bottom:70px;" alt=""/>
<br/><h:outputText
value="#{bundle['login.recommend']}" style="color:#666666"/>
</td>
<td><img src="images/pix.gif" width="23" alt=""/></td>
<!--end left part-->
<!--right part-->
<td width="325" align="left" valign="top">
<table width="325" border="0" cellpadding="0"
cellspacing="0" bordercolor="#3399FF">
<tr>
<td class="bg_white" colspan="3"><img
src="images/pix.gif" width="1" height="10" alt=""/></td>
</tr>
<tr>
<td colspan="3" align="center"
class="bg_white">
<!-- activated Publisher -->
<h:panelGroup
id="activatedPublisherPanelGroup"
rendered="#{login.activationCodeValid}" >
<table width="250" border="0"
cellpadding="0" cellspacing="0">
<tr>
<td class="info_message bold"
align="left">
<h:outputText
value="#{bundle['login.account.activated']}"/>
</td>
</tr>
<tr>
<td class="bg_white"
colspan="2"><img src="images/pix.gif" width="1" height="25"
alt=""/></td>
</tr>
</table>
</h:panelGroup>
<!-- activated Publisher-->
<!--login-->
<h:panelGroup rendered="#{login.mode ==
'login'}"><!---->
<table width="250" border="0"
cellpadding="0" cellspacing="0">
<tr>
<td class="text_log"
align="left">
<h:outputText
value="#{bundle['login.signin']}:"/>
</td>
<td align="right">
<img
style="cursor:hand;cursor:pointer"
onclick="TINY.box.show({url:'help_info.jspx?helpId=1',width:300,height:
150})" src="images/buttons/b_helplog.gif" border="0" alt=""/>
</td>
</tr>
<tr>
<td class="bg_white"
colspan="2"><img src="images/pix.gif" width="1"
height="20" alt=""/></td>
</tr>
<tr>
<td class="text_log bold"
colspan="2">
<div>
<h:message for="btnLogin"
styleClass="error_message"/>
<h:outputText
value="#{bundle['login.password.changed']}"
rendered="#{param['passwordChanged'] == true}"
styleClass="info_message" />
</div>
<h:outputText
value="#{bundle['login.username']}:"/>
</td>
</tr>
<tr>
<td class="text_log bold"
colspan="2">
<h:inputText id="username"
styleClass="mform" value="#{login.username}"
required="true"
style="width:210px;" onkeypress="autoLogin(event);"/>
<div>
<h:message for="username"
styleClass="error_message"/>
</div>
</td>
</tr>
<tr>
<td class="bg_white"
colspan="2"><img src="images/pix.gif" width="1"
height="20" alt=""/></td>
</tr>
<tr>
<td class="text_log bold"
colspan="2">
<h:outputText
value="#{bundle['login.password']}:"/>
</td>
</tr>
<tr>
<td class="text_log bold"
colspan="2">
<h:inputSecret
id="password" value="#{login.password}" required="true"
styleClass="mform"
style="width:210px;" onkeypress="autoLogin(event);"/>
<div>
<h:message for="password"
styleClass="error_message"/>
</div>
</td>
</tr>
<tr>
<td class="bg_white"
colspan="2"><img src="images/pix.gif" width="1"
height="20" alt=""/></td>
</tr>
<tr>
<td class="text_log" colspan="2">
<h:selectBooleanCheckbox
id="rememberUser" value="#{login.remember}"/> <h:outputText
value="#{bundle['login.remember']}"/>
</td>
</tr>
<tr>
<td class="bg_white"
colspan="2"><img src="images/pix.gif" width="1"
height="25" alt=""/></td>
</tr>
<tr>
<td colspan="2" align="center">
<table class="tableButton"
width="95" border="0" cellpadding="0"
cellspacing="0">
<tr class="cursor">
<td
class="bg_bt_or_left">
<h:commandLink
id="btnLogin" value="#{bundle['login.login']}"
action="#{login.loginAction}"
forceId="true" styleClass="link_but">
<f:param
name="next" value="true"/>
</h:commandLink>
</td>
<td
class="bg_bt_or_right" width="5"><img src="images/pix.gif"
width="5" height="1" alt=""/>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td class="bg_white"
colspan="2"><img src="images/pix.gif" width="1" height="35"
alt=""/></td>
</tr>
<tr>
<td colspan="2" align="center">
<h:outputLink styleClass="linkor"
value="login.jspx">
<f:param name="mode"
value="forgot_password" />
<h:outputText
value="#{bundle['login.forgot.password']}" />
</h:outputLink>
</td>
</tr>
<tr>
<td class="bg_white"
colspan="2"><img src="images/pix.gif" width="1"
height="35" alt=""/></td>
</tr>
<tr>
<td colspan="2" align="center"
class="t_11dgr">
<h:outputText
value="#{bundle['login.no.account']}"/><br/>
</td>
</tr>
<tr>
<td colspan="2" align="center">
<table cellpadding="0"
cellspacing="0">
<tr>
<td>
<table
class="tableButton" width="125" border="0" cellpadding="0"
cellspacing="0">
<tr
class="cursor">
<td
class="bg_bt_or_left">
<h:outputLink value="pub_registration.jspx" styleClass="link_but">
<h:outputText value="#{bundle['login.publishers']}"/>
</h:outputLink>
</td>
<td
class="bg_bt_or_right" width="5"><img src="images/pix.gif"
width="5" height="1" alt=""/>
</td>
</tr>
</table>
</td>
<td>
<table
class="tableButton" width="125" border="0" cellpadding="0"
cellspacing="0">
<tr
class="cursor">
<td
class="bg_bt_or_left">
<h:outputLink value="
http://www.todacell.com/contact-us"
styleClass="link_but">
<h:outputText value="#{bundle['login.advertisers']}"/>
</h:outputLink>
</td>
<td
class="bg_bt_or_right" width="5"><img src="images/pix.gif"
width="5" height="1" alt=""/>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
 
</td>
</tr>
</table>
</h:panelGroup>
<!--endlogin-->
<!-- forgot password -->
<h:panelGroup rendered="#{login.mode ==
'forgot_password'}">
<table width="250" border="0"
cellpadding="0" cellspacing="0">
<tr>
<td class="text_log"
align="left"><h:outputText
value="#{bundle['login.forgot.password.mail']}:"/></td>
<td align="right"><a
href="#"><img src="images/buttons/b_helplog.gif" width="41"
height="29"
border="0" alt=""/></a></td>
</tr>
<tr>
<td class="bg_white"
colspan="2"><img src="images/pix.gif" width="1"
height="20" alt=""/></td>
</tr>
<tr>
<td class="text_log bold"
colspan="2">
<h:outputText
value="#{bundle['login.username']}:"/>
</td>
</tr>
<tr>
<td class="text_log bold"
colspan="2">
<h:inputText
id="usernameForgot" styleClass="mform" value="#{login.usernameForgot}"
required="true"
style="width:210px;" onkeypress="autoLogin(event);"/>
<div>
<h:message
for="usernameForgot" styleClass="error_message"/>
</div>
</td>
</tr>
<tr>
<td class="bg_white"
colspan="2"><img src="images/pix.gif" width="1"
height="20" alt=""/></td>
</tr>
<tr>
<td colspan="2" align="center">
<table class="tableButton"
width="120" border="0" cellpadding="0"
cellspacing="0">
<tr class="cursor">
<td
class="bg_bt_or_left">
<h:commandLink
id="btnSendMail" value="#{bundle['login.send.mail']}"
action="#{login.sendMailAction}" forceId="true" styleClass="link_but"/>
</td>
<td
class="bg_bt_or_right" width="5"><img src="images/pix.gif"
width="5" height="1" alt=""/>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td class="bg_white"
colspan="2"><img src="images/pix.gif" width="1" height="133"
alt=""/></td>
</tr>
<tr>
<td colspan="2" align="center">
<a href="login.jspx"
class="linkor">
<h:outputText
value="#{bundle['login.back']}"/>
</a>
</td>
</tr>
<tr>
<td class="bg_white"
colspan="2"><img src="images/pix.gif" width="1"
height="35" alt=""/></td>
</tr>
<tr>
<td colspan="2" align="center"
class="t_11dgr">
<h:outputText
value="#{bundle['login.no.account']}"/><br/>
</td>
</tr>
<tr>
<td colspan="2" align="center">
<table cellpadding="0"
cellspacing="0">
<tr>
<td>
<table
class="tableButton" width="125" border="0" cellpadding="0"
cellspacing="0">
<tr
class="cursor">
<td
class="bg_bt_or_left">
<h:outputLink value="pub_registration.jspx" styleClass="link_but">
<h:outputText value="#{bundle['login.publishers']}"/>
</h:outputLink>
</td>
<td
class="bg_bt_or_right" width="5"><img src="images/pix.gif"
width="5" height="1" alt=""/>
</td>
</tr>
</table>
</td>
<td>
<table
class="tableButton" width="125" border="0" cellpadding="0"
cellspacing="0">
<tr
class="cursor">
<td
class="bg_bt_or_left">
<h:outputLink value="
http://www.todacell.com/contact-us"
styleClass="link_but">
<h:outputText value="#{bundle['login.advertisers']}"/>
</h:outputLink>
</td>
<td
class="bg_bt_or_right" width="5"><img src="images/pix.gif"
width="5" height="1" alt=""/>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
 
</td>
</tr>
</table>
</h:panelGroup>
<!-- /forgot password -->
<!-- forgot password sent -->
<h:panelGroup rendered="#{login.mode ==
'forgot_password_sent'}">
<table width="250" border="0"
cellpadding="0" cellspacing="0">
<tr>
<td class="text_log"
align="left"><h:outputText
value="#{bundle['login.forgot.password.mail.sent']}"/></td>
</tr>
<tr>
<td class="bg_white"
colspan="2"><img src="images/pix.gif" width="1"
height="20" alt=""/></td>
</tr>
<tr>
<td class="bg_white"
colspan="2"><img src="images/pix.gif" width="1"
height="214" alt=""/></td>
</tr>
<tr>
<td colspan="2" align="center">
<a href="login.jspx"
class="linkor">
<h:outputText
value="#{bundle['login.back']}"/>
</a>
</td>
</tr>
<tr>
<td class="bg_white"
colspan="2"><img src="images/pix.gif" width="1"
height="35" alt=""/></td>
</tr>
<tr>
<td colspan="2" align="center"
class="t_11dgr">
<h:outputText
value="#{bundle['login.no.account']}"/><br/>
</td>
</tr>
<tr>
<td colspan="2" align="center">
<table cellpadding="0"
cellspacing="0">
<tr>
<td>
<table
class="tableButton" width="125" border="0" cellpadding="0"
cellspacing="0">
<tr
class="cursor">
<td
class="bg_bt_or_left">
<h:outputLink value="pub_registration.jspx" styleClass="link_but">
<h:outputText value="#{bundle['login.publishers']}"/>
</h:outputLink>
</td>
<td
class="bg_bt_or_right" width="5"><img src="images/pix.gif"
width="5" height="1" alt=""/>
</td>
</tr>
</table>
</td>
<td>
<table
class="tableButton" width="125" border="0" cellpadding="0"
cellspacing="0">
<tr
class="cursor">
<td
class="bg_bt_or_left">
<h:outputLink value="
http://www.todacell.com/contact-us"
styleClass="link_but">
<h:outputText value="#{bundle['login.advertisers']}"/>
</h:outputLink>
</td>
<td
class="bg_bt_or_right" width="5"><img src="images/pix.gif"
width="5" height="1" alt=""/>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
 
</td>
</tr>
</table>
</h:panelGroup>
<!-- /forgot password sent -->
<!-- forgot password -->
<h:panelGroup rendered="#{login.mode ==
'reset_password'}">
<h:panelGroup rendered="#{not
login.confirmationCodeValid}">
<table width="250" border="0"
cellpadding="0" cellspacing="0">
<tr>
<td class="text_log"
align="left"><h:outputText styleClass="error_message"
value="#{bundle['login.confimration.error']}"/></td>
</tr>
<tr>
<td class="bg_white"
colspan="2"><img src="images/pix.gif" width="1" height="200"
alt=""/></td>
</tr>
<tr>
<td colspan="2"
align="center">
<a href="login.jspx"
class="linkor">
<h:outputText
value="#{bundle['login.back']}"/>
</a>
</td>
</tr>
<tr>
<td class="bg_white"
colspan="2"><img src="images/pix.gif" width="1"
height="35" alt=""/></td>
</tr>
<tr>
<td colspan="2"
align="center" class="t_11dgr">
<h:outputText
value="#{bundle['login.no.account']}"/><br/>
</td>
</tr>
<tr>
<td colspan="2"
align="center">
<table cellpadding="0"
cellspacing="0">
<tr>
<td>
<table
class="tableButton" width="125" border="0" cellpadding="0"
cellspacing="0">
<tr
class="cursor">
<td
class="bg_bt_or_left">
<h:outputLink value="pub_registration.jspx" styleClass="link_but">
<h:outputText value="#{bundle['login.publishers']}"/>
</h:outputLink>
</td>
<td
class="bg_bt_or_right" width="5"><img src="images/pix.gif"
width="5" height="1" alt=""/>
</td>
</tr>
</table>
</td>
<td>
<table
class="tableButton" width="125" border="0" cellpadding="0"
cellspacing="0">
<tr
class="cursor">
<td
class="bg_bt_or_left">
<h:outputLink value="
http://www.todacell.com/contact-us"
styleClass="link_but">
<h:outputText value="#{bundle['login.advertisers']}"/>
</h:outputLink>
</td>
<td
class="bg_bt_or_right" width="5"><img src="images/pix.gif"
width="5" height="1" alt=""/>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
 
</td>
</tr>
</table>
</h:panelGroup>
<h:panelGroup
rendered="#{login.confirmationCodeValid}">
<table width="250" border="0"
cellpadding="0" cellspacing="0">
<tr>
<td class="text_log"
align="left"><h:outputText
value="#{bundle['login.reset.password']}:"/></td>
<td align="right"><a
href="#"><img src="images/buttons/b_helplog.gif" width="41" height="29"
border="0" alt=""/></a></td>
</tr>
<tr>
<td class="bg_white"
colspan="2"><img src="images/pix.gif" width="1" height="20"
alt=""/></td>
</tr>
<tr>
<td class="text_log bold"
colspan="2">
<h:outputText
value="#{bundle['login.password']}:"/>
</td>
</tr>
<tr>
<td class="text_log bold"
colspan="2">
<h:inputSecret
id="resetPassword" styleClass="mform" value="#{login.resetPassword}"
required="true" style="width:210px;" maxlength="20">
<f:validateLength
minimum="6" maximum="20" />
</h:inputSecret>
<div>
<h:message
for="resetPassword" styleClass="error_message"/>
</div>
</td>
</tr>
<tr>
<td class="bg_white"
colspan="2"><img src="images/pix.gif" width="1"
height="20" alt=""/></td>
</tr>
<tr>
<td class="text_log bold"
colspan="2">
<h:outputText
value="#{bundle['login.password.confirm']}:"/>
</td>
</tr>
<tr>
<td class="text_log bold"
colspan="2">
<h:inputSecret
id="resetPasswordConfirm" styleClass="mform"
value="#{login.resetPasswordConfirm}"
required="true" style="width:210px;" maxlength="20">
<f:validateLength
minimum="6" maximum="20" />
</h:inputSecret>
<div>
<h:message
for="resetPasswordConfirm" styleClass="error_message"/>
</div>
</td>
</tr>
<tr>
<td class="bg_white"
colspan="2"><img src="images/pix.gif" width="1" height="20"
alt=""/></td>
</tr>
<tr>
<td colspan="2"
align="center">
<table
class="tableButton" width="165" border="0" cellpadding="0"
cellspacing="0">
<tr class="cursor">
<td
class="bg_bt_or_left">
<h:commandLink id="btnChangePassword"
value="#{bundle['login.change.password']}"
action="#{login.changePasswordAction}" forceId="true"
styleClass="link_but"/>
</td>
<td
class="bg_bt_or_right" width="5"><img src="images/pix.gif"
width="5" height="1" alt=""/>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td class="bg_white"
colspan="2"><img src="images/pix.gif" width="1" height="79"
alt=""/></td>
</tr>
<tr>
<td colspan="2"
align="center">
<a href="login.jspx"
class="linkor">
<h:outputText
value="#{bundle['login.back']}"/>
</a>
</td>
</tr>
<tr>
<td class="bg_white"
colspan="2"><img src="images/pix.gif" width="1"
height="35" alt=""/></td>
</tr>
<tr>
<td colspan="2"
align="center" class="t_11dgr">
<h:outputText
value="#{bundle['login.no.account']}"/><br/>
</td>
</tr>
<tr>
<td colspan="2"
align="center">
<table cellpadding="0"
cellspacing="0">
<tr>
<td>
<table
class="tableButton" width="125" border="0" cellpadding="0"
cellspacing="0">
<tr
class="cursor">
<td
class="bg_bt_or_left">
<h:outputLink value="pub_registration.jspx" styleClass="link_but">
<h:outputText value="#{bundle['login.publishers']}"/>
</h:outputLink>
</td>
<td
class="bg_bt_or_right" width="5"><img src="images/pix.gif"
width="5" height="1" alt=""/>
</td>
</tr>
</table>
</td>
<td>
<table
class="tableButton" width="125" border="0" cellpadding="0"
cellspacing="0">
<tr
class="cursor">
<td
class="bg_bt_or_left">
<h:outputLink value="
http://www.todacell.com/contact-us"
styleClass="link_but">
<h:outputText value="#{bundle['login.advertisers']}"/>
</h:outputLink>
</td>
<td
class="bg_bt_or_right" width="5"><img src="images/pix.gif"
width="5" height="1" alt=""/>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
 
</td>
</tr>
</table>
</h:panelGroup>
</h:panelGroup>
<!-- /forgot password -->
</td>
</tr>
</table>
</td>
<!--end right part-->
<td><img src="images/pix.gif" width="23" alt=""/></td>
</tr>
<!-- bottom corners-->
<tr>
<td colspan="5" align="left" valign="top">
<table width="100%" border="0" cellpadding="0"
cellspacing="0">
<tr>
<td><img src="images/pix.gif" width="23"
height="1" alt=""/></td>
<td width="100%">
<table width="100%" cellpadding="0"
cellspacing="0">
<tr>
<td width="18"><img
src="images/general/corner_bt_left.gif" width="18"
height="15"
alt=""/></td>
<td width="100%"
class="bg_white"><img src="images/pix.gif" alt=""/></td>
<td width="18"><img
src="images/general/corner_bt_right.gif" width="18"
height="15"
alt=""/></td>
</tr>
</table>
</td>
<td><img src="images/pix.gif" width="23"
height="1" alt=""/></td>
<td width="325" align="left" valign="top">
<table width="325" cellpadding="0"
cellspacing="0">
<tr>
<td width="18"><img
src="images/general/corner_bt_left.gif" width="18"
height="15"
alt=""/></td>
<td width="100%"
class="bg_white"><img src="images/pix.gif" alt=""/></td>
<td width="18"><img
src="images/general/corner_bt_right.gif" width="18"
height="15"
alt=""/></td>
</tr>
</table>
</td>
<td><img src="images/pix.gif" width="23"
height="1" alt=""/></td>
</tr>
</table>
</td>
</tr>
<!--end bottom corners-->
<tr>
<td><img src="images/pix.gif" width="1" height="25"
alt=""/></td>
</tr>
</table>
</td>
</tr>
<tr>
<td class="bg_green" width="100%"></td>
</tr>
<tr>
<td><img src="images/pix.gif" width="1" height="2" alt=""/></td>
</tr>
<!--footer-->
<tr>
<td>
<table width="100%" cellspacing="0" cellpadding="0">
<tr>
<td width="15px" class="bg_foot">
</td>
<td class="bg_foot" style="text-align:left;">
Toda!Bridge <h:outputText
value="#{appBean.version}"/><h:outputText value=",
#{appBean.buildDate}"
rendered="#{not empty appBean.buildDate}"/>
</td>
<td class="bg_foot">
<h:outputLink
value="
http://www.todacell.com/about-us" styleClass="linkfoot_login">
<h:outputText
value="#{bundle['inc_footer.about']}"/>
</h:outputLink>
  |  
<h:outputLink value="
http://www.todacell.com/"
styleClass="linkfoot_login">
<h:outputText
value="#{bundle['inc_footer.products']}"/>
</h:outputLink>
  |  
<h:outputLink
value="
http://www.todacell.com/products/todabridge-publishers"
styleClass="linkfoot_login">
<h:outputText
value="#{bundle['inc_footer.solutions']}"/>
</h:outputLink>
  |  
<h:outputLink
value="
http://www.todacell.com/contact-us" styleClass="linkfoot_login">
<h:outputText
value="#{bundle['inc_footer.contact']}"/>
</h:outputLink>
</td>
<td width="15px" class="bg_foot"></td>
</tr>
</table>
</td>
</tr>
<!--end footer-->
</table>
</td>
</tr>
</table>
</h:form>
</h:body>
<!--
</f:view>
-->
</html>
inc_head.xhtml:
-----------------------------
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="
http://www.w3.org/1999/xhtml"
xmlns:h="
http://java.sun.com/jsf/html"
xmlns:f="
http://java.sun.com/jsf/core"
xmlns:t="
http://myfaces.apache.org/tomahawk"
xmlns:a4j="
http://richfaces.org/a4j"
xmlns:rich="
http://richfaces.org/rich">
<f:loadBundle basename="com.todacell.ui.view.i18n.bundle.resources"
var="bundle" />
<h:head>
<title>Todacell - <h:outputText
value="#{requestScope['pageTitle']}" rendered="#{not empty
requestScope['pageTitle']}" /></title>
<link rel="shortcut icon" href="images/favicon.ico"
type="image/x-icon"/>
<link rel="stylesheet" type="text/css" href="css/css.css" />
<script type='text/javascript' src='js/ajax.js'></script>
<meta content="#{appBean.sessionLiveInterval}" name="hello"></meta>
<script type="text/javascript">
//<![CDATA[
function InitClient() {
this.arrFunc = new Array();
}
InitClient.prototype.start = function() {
var str = "";
for (key in this.arrFunc) {
if (this.arrFunc.hasOwnProperty(key)) {
this.arrFunc[key]();
}
}
};
InitClient.prototype.push = function(func) {
this.arrFunc.push(func);
};
var initClient = new InitClient();
initClient.push(
function() {
window.setInterval("Ajax.HTTPServerRequest('sessionKeepAlive', null,
false);", #{appBean.sessionLiveInterval} );
}
);
//]]>
</script>
</h:head>
<rich:jQuery selector="document" timing="domready"
query="ready(initClient.start())" />
<h:panelGroup rendered="#{empty requestScope['isSkipMootools']}"
escape="false">
<script type='text/javascript' src='js/mootools.js'></script>
</h:panelGroup>
</html>
faces-config.xml:
--------------------------
<?xml version="1.0" encoding="windows-1255"?>
<!DOCTYPE faces-config PUBLIC
"-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
"
http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
<faces-config version="2.0" xmlns="
http://java.sun.com/xml/ns/javaee"
xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd">
<application>
<locale-config>
<default-locale>en</default-locale>
<supported-locale>ja</supported-locale>
</locale-config>
<message-bundle>com.todacell.ui.view.i18n.bundle.resources</message-bun
dle>
</application>
<lifecycle>
<phase-listener>com.todacell.ui.view.i18n.LocalePhaseListener</phase-li
stener>
</lifecycle>
</faces-config>
LoginBean.java
------------------------
package com.todacell.ui.view.bean;
import com.ocpsoft.pretty.faces.annotation.URLMapping;
import com.todacell.commons.date.DateUtils;
import com.todacell.commons.email.SendEmail;
import com.todacell.commons.enc.Base64Encrypter;
import com.todacell.ui.model.bo.publisher.User;
import com.todacell.ui.model.bo.publisher.UserIdentity;
import com.todacell.ui.model.bo.system.AdvertiserStatus;
import com.todacell.ui.model.bo.system.PublisherStatus;
import com.todacell.ui.model.bo.system.ServiceType;
import com.todacell.ui.model.bo.system.UserRole;
import com.todacell.ui.model.dao.DAOFactory;
import com.todacell.ui.view.util.CookieUtil;
import com.todacell.ui.view.util.FacesUtil;
import com.todacell.ui.view.util.PropKey;
import com.todacell.ui.view.util.ViewUtil;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import java.net.URLDecoder;
import java.util.Date;
import java.util.Locale;
/**
* @author Bashan
* @version 1.0, 08/04/2008
*/
@ManagedBean(name = "login")
@ViewScoped
@URLMapping(id = "login", pattern = "/login", viewId = "/login.jsf")
public class LoginBean {
private static final Log log = LogFactory.getLog(LoginBean.class);
private String username;
private String password;
private boolean isRemember;
private String language;
private String mode;
private String usernameForgot;
private String resetPassword;
private String resetPasswordConfirm;
private String confirmationCode =
FacesUtil.getRequestParameter(RequestParamNames.CONFIRMATION_CODE);
private Boolean isConfirmationCodeValid;
private Boolean isActivationCodeValid;
private String next;
public LoginBean() {
setNext(FacesUtil.getRequestParameter("next"));
if (next != null && !("".equals(next))) {
try {
setNext(URLDecoder.decode(next, "UTF-8"));
} catch (Exception e) {
}
if (!next.equals("true")) {
setNext(Base64Encrypter.decode(next));
}
loginFromNextToken(next);
if (ViewUtil.isLogged(FacesUtil.getRequest().getSession())
&& !next.equals("true")) {
FacesUtil.redirect(next);
}
}
}
public void loginAction() {
UserIdentity userIdentity =
DAOFactory.getUserDAO().getUserIdentity(username, password);
if (userIdentity != null) {
User userToCheck =
DAOFactory.getUserDAO().getUser(userIdentity.getUserId());
if (null == userToCheck.getAdvertiser() ||
userToCheck.getAdvertiser().getServiceType() !=
ServiceType.SELF_SERVICE) {
FacesUtil.addErrorMessage("btnLogin",
"#{bundle['login.error']}");
return;
}
if (userToCheck.getUserRole().equals(UserRole.ADVERTISER)
&&
!userToCheck.getAdvertiser().getActive() &&
!AdvertiserStatus.Inactive.equals(userToCheck.getAdvertiser().getStatus
())) {
FacesUtil.addErrorMessage("btnLogin",
"#{bundle['login.error.inactive.account']}");
return;
}
String errorMessage =
ViewUtil.validateUser(FacesUtil.getRequest(), username, password);
if (errorMessage != null) {
FacesUtil.addErrorMessage("btnLogin", errorMessage);
return;
}
// user is allowed to log in
//send welcome Email
if (null == userIdentity.getUser().getFirstLoginDate()) {
User user = userIdentity.getUser();
new SendEmail(user, PropKey.MAIL_WELCOME_SUBJECT,
PropKey.MAIL_WELCOME_BODY).start();
user.setFirstLoginDate(new Date());
DAOFactory.getPublisherDAO().saveObject(user);
}
if (isRemember) {
CookieUtil.setUserAutoLogin(FacesUtil.getResponse(),
username, password);
} else {
CookieUtil.removeUserAutoLogin(FacesUtil.getResponse());
}
if (next != null && !("".equals(next))) {
//setNext(Base64Encrypter.decode(next));
FacesUtil.redirect(next);
} else {
FacesUtil.redirect(ViewUtil.getWelcomePage(FacesUtil.getUserSession()))
;
}
} else {
FacesUtil.addErrorMessage("btnLogin",
"#{bundle['login.error']}");
}
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
/*
FacesContext.getCurrentInstance().getExternalContext().getRequestParame
terMap()
*/
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getNext() {
return next;
}
public void setNext(String next) {
this.next = next;
}
public boolean isRemember() {
return isRemember;
}
public void setRemember(boolean remember) {
isRemember = remember;
}
public String getLanguage() {
if (language == null) {
language =
CookieUtil.getCookieValue(FacesUtil.getRequest(), CookieUtil.LANG);
language = language != null ? language :
Locale.US.toString();
}
return language;
}
public String getUsernameForgot() {
return usernameForgot;
}
public void setUsernameForgot(String usernameForgot) {
this.usernameForgot = usernameForgot;
}
public void changePasswordAction() {
if (!resetPassword.equals(resetPasswordConfirm)) {
FacesUtil.addErrorMessage("formLogin:resetPassword",
"#{bundle['account_user.password.not.equal']}");
} else {
UserIdentity userIdentity =
DAOFactory.getUserDAO().getUserIdentityByConfirmationCode(confirmationC
ode);
userIdentity.setConfirmationCode(null);
userIdentity.setConfirmationDate(null);
userIdentity.setPassword(resetPassword);
DAOFactory.getCampaignDAO().saveObject(userIdentity);
FacesUtil.redirect("login.jspx?passwordChanged=true");
}
}
public void sendMailAction() throws Exception {
UserIdentity userIdentity =
DAOFactory.getUserDAO().getUserIdentity(usernameForgot);
if (userIdentity != null) {
String sha = DigestUtils.shaHex(new Date() +
FacesUtil.getSession().getId());
userIdentity.setConfirmationCode(sha);
userIdentity.setConfirmationDate(new Date());
DAOFactory.getCampaignDAO().saveObject(userIdentity);
User user = userIdentity.getUser();
String passwordResetUrl = FacesUtil.getServerContext() +
"/login.jspx?mode=reset_password&" +
RequestParamNames.CONFIRMATION_CODE + "=" + sha;
new SendEmail(user, PropKey.MAIL_PASSWORD_RESET_SUBJECT,
PropKey.MAIL_PASSWORD_RESET_BODY, passwordResetUrl).start();
FacesUtil.redirect("login.jspx?mode=forgot_password_sent");
} else {
FacesUtil.addErrorMessage("formLogin:usernameForgot",
"#{bundle['login.forgot.password.user.not.found']}");
}
}
public String getMode() {
String mode = FacesUtil.getRequestParameter("mode");
return mode != null ? mode : "login";
}
public void setMode(String mode) {
this.mode = mode;
}
public String getResetPassword() {
return resetPassword;
}
public void setResetPassword(String resetPassword) {
this.resetPassword = resetPassword;
}
public String getResetPasswordConfirm() {
return resetPasswordConfirm;
}
public void setResetPasswordConfirm(String resetPasswordConfirm) {
this.resetPasswordConfirm = resetPasswordConfirm;
}
public String getConfirmationCode() {
return confirmationCode;
}
public void setConfirmationCode(String confirmationCode) {
this.confirmationCode = confirmationCode;
}
public boolean isConfirmationCodeValid() {
if (isConfirmationCodeValid == null) {
UserIdentity userIdentity =
DAOFactory.getUserDAO().getUserIdentityByConfirmationCode(confirmationC
ode);
isConfirmationCodeValid = userIdentity != null &&
DateUtils.diffMinutes(new Date(), userIdentity.getConfirmationDate())
<= 30;
}
return isConfirmationCodeValid;
}
public boolean isActivationCodeValid() {
String activationCode =
FacesUtil.getRequestParameter(RequestParamNames.ACTIVATION_CODE);
if (isActivationCodeValid == null) {
UserIdentity userIdentity =
DAOFactory.getUserDAO().getUserIdentityByConfirmationCode(activationCod
e);
isActivationCodeValid = userIdentity != null &&
userIdentity.getConfirmationCode().equalsIgnoreCase(activationCode);
}
if (isActivationCodeValid)
activateUser(activationCode);
return isActivationCodeValid;
}
private void activateUser(String activationCode) {
if (isActivationCodeValid) {
UserIdentity userIdentity =
DAOFactory.getUserDAO().getUserIdentityByConfirmationCode(activationCod
e);
setUsername(userIdentity.getUsername());
User userToActivate =
DAOFactory.getUserDAO().getUser(userIdentity.getUserId());
userToActivate.setActivationDate(new Date());
userToActivate.setIsActive(true);
if (userToActivate.getPublisher() != null) {
userToActivate.getPublisher().setStatus(PublisherStatus.New);
userToActivate.getPublisher().setLastStatusDate(new
Date());
}
if (userToActivate.getAdvertiser() != null) {
userToActivate.getAdvertiser().setStatus(AdvertiserStatus.New);
userToActivate.getAdvertiser().setLastStatusDate(new
Date());
}
DAOFactory.getPublisherDAO().saveObject(userToActivate);
}
}
private void loginFromNextToken(String urlParam) {
try {
urlParam = java.net.URLDecoder.decode(urlParam, "UTF-8");//
} catch (Exception e) {
log.error("Failed Decoding: urlParam ", e);
}
String advertiserToken = "";
String[] customParam = urlParam.split("&");
for (String param : customParam) {
param = param.replace('=', ' ');
String[] paramSTRArray = param.split(" ");
String paramKey = paramSTRArray[0];
String paramValue = paramSTRArray.length > 1 ?
paramSTRArray[1] : "-1";
if ("token".equals(paramKey)) {
advertiserToken = paramValue.toString();
}
}
UserIdentity userIdentity =
DAOFactory.getPublisherDAO().getUserIdentityByToken(advertiserToken);
if (null != userIdentity) {
ViewUtil.validateUser(FacesUtil.getRequest(),
userIdentity.getUsername(), userIdentity.getPassword());
}
}
}
web.xml:
--------------
<?xml version = '1.0' encoding = 'windows-1255'?>
<web-app version="3.0"
xmlns="
http://java.sun.com/xml/ns/javaee"
xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
>
<display-name>JavaServerFaces</display-name>
<filter>
<filter-name>Pretty Filter</filter-name>
<filter-class>com.ocpsoft.pretty.PrettyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Pretty Filter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
<context-param>
<param-name>com.ocpsoft.pretty.DEVELOPMENT</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>com.ocpsoft.pretty.BASE_PACKAGES</param-name>
<param-value>com.todacell.ui.view.bean</param-value>
</context-param>
<context-param>
<param-name>org.richfaces.skin</param-name>
<param-value>plain</param-value>
</context-param>
<context-param>
<param-name>org.richfaces.enableControlSkinning</param-name>
<param-value>false</param-value>
</context-param>
<!-- Change to "Production" when you are ready to deploy -->
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<!--
<!– Welcome page –>
<welcome-file-list>
<welcome-file>faces/hello.xhtml</welcome-file>
</welcome-file-list>
-->
<!-- JSF mapping -->
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Map these files with JSF -->
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.faces</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Init Servlet</servlet-name>
<servlet-class>com.todacell.ui.view.servlet.InitServlet</servlet-class>
<init-param>
<param-name>conf_dir</param-name>
<param-value>/WEB-INF/conf/</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Init Servlet</servlet-name>
<url-pattern>/is</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>SessionKeepAlive</servlet-name>
<servlet-class>
com.todacell.ui.view.servlet.SessionKeepAlive
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SessionKeepAlive</servlet-name>
<url-pattern>/sessionKeepAlive</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Chart Servlet</servlet-name>
<servlet-class>
com.todacell.ui.view.chart.ChartServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Chart Servlet</servlet-name>
<url-pattern>/chart/*</url-pattern>
</servlet-mapping>
</web-app>
jar files:
-------------
antlr-2.7.6.jar
asm-3.1.jar
asm-attrs.jar
asm.jar
axis.jar
batik-awt-util-1.6-1.jar
batik-ext-1.6-1.jar
batik-gui-util-1.6-1.jar
batik-util-1.6-1.jar
c3p0-0.9.1.2.jar
cglib-2.1.3.jar
commons-beanutils-1.7.0.jar
commons-cli-1.1.jar
commons-codec-1.3.jar
commons-codec-1.4.jar
commons-collections-3.2.1.jar
commons-collections-3.2.jar
commons-compress-1.0.jar
commons-configuration-1.5.jar
commons-configuration-1.6.jar
commons-digester-1.6.jar
commons-discovery-0.2.jar
commons-discovery-0.4.jar
commons-el-1.0.jar
commons-email.jar
commons-fileupload-1.2.1.jar
commons-httpclient-3.0.1.jar
commons-io-1.3.2.jar
commons-io-1.4.jar
commons-lang-2.4.jar
commons-logging-1.1.1.jar
commons-validator-1.3.1.jar
concurrentlinkedhashmap-lru-1.2.jar
cssparser-0.9.9.jar
dom4j-1.6.1.jar
dom4j-1.6.jar
ehcache-1.2.3.jar
ejb3-persistence.jar
fdsapi-1.2.jar
guava-13.0.1.jar
hibernate-3.3.1.jar
hibernate-annotations-3.4.0.jar
hibernate-annotations.jar
hibernate-commons-annotations.jar
hibernate-validator-4.2.0.Final.jar
hibernate-validator.jar
hibernate3.jar
hsqldb.jar
httpclient-4.0.jar
httpcore-4.0.1.jar
icu4j-4_2_1.jar
iText-2.1.4.jar
iTextAsian.jar
iTextAsianCmaps.jar
jakarta-oro-2.0.8.jar
jamon-2.7.jar
janino.jar
jasperreports-3.5.1.jar
java2html-5.0.jar
javassist-3.4.GA.jar
javax.faces-2.2.3.jar
jaxrpc.jar
jdom.jar
jregex1.2_01.jar
jsf-facelets-1.1.14.jar
jsfpager.jar
json_simple-1.1.jar
jstl.jar
jta.jar
junit.jar
jxl-2.6.jar
kxml2-2.3.0.jar
log4j-1.2.15.jar
log4j_appender.jar
mail.jar
oro-2.0.8.jar
poi-3.5-beta5-20090219.jar
poi-3.7-20101029.jar
poi-contrib-3.5-beta5-20090219.jar
poi-ooxml-3.7-20101029.jar
poi-ooxml-schemas-3.7-20101029.jar
poi-scratchpad-3.7-20101029.jar
prettyfaces-jsf2-3.3.3.jar
proxool-0.8.3.jar
quartz-1.6.0.jar
richfaces-components-api-4.3.3.Final.jar
richfaces-components-ui-4.3.3.Final.jar
richfaces-core-api-4.3.3.Final.jar
richfaces-core-impl-4.3.3.Final.jar
saaj.jar
slf4j-api-1.5.6.jar
slf4j-log4j12-1.5.6.jar
sqljdbc.jar
tar.jar
tomahawk20-1.1.14.jar
validation-api-1.0.0.GA.jar
velocity-1.5.jar
wsdl4j-1.5.1.jar
xml-apis-1.0.b2.jar
xmlbeans-2.3.0.jar
xmlParserAPIs-2.0.2.jar
xstream-1.4.2.jar