In Tomcat - PostConstruct called exactly once when I click on any functionality within page.
WAS Liberty server - PostConstruct called every time when I click on any functionality within page.
JSF Code->
<?xml version="1.0" encoding="UTF-8" ?>
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:p="http://primefaces.org/ui" template="/templates/template.xhtml">
<ui:define name="horiz_nav">
<ui:include src="/private/common/horiz_nav_mng.xhtml" />
</ui:define>
<ui:define name="canvas">
<ui:decorate template="/templates/contentWithoutLHS.xhtml">
<ui:define name="legendName">
</ui:define>
<ui:define name="content">
<h:form id="listOfEmployeesForm">
<b>2.Managing Employees</b>
<br />
<b>2.4.List Of Employees </b>
<center>
<table>
<tr>
<td> <B> COUNTRY </B> </td>
<td>
<h:selectOneMenu value="#{listOfEmployeesBean.country}">
<f:selectItem itemValue="BE" itemLabel="BE" />
<f:selectItem itemValue="NL" itemLabel="NL" />
</h:selectOneMenu>
</td>
</tr>
<tr>
</tr>
<tr>
<td> <B> LAST NAME </B> </td>
<td>
<h:inputText type="text" value="#{listOfEmployeesBean.lastName}" />
</td>
</tr>
<tr>
</tr>
<tr>
<td> <B> UID </B> </td>
<td>
<h:inputText type="text" value="#{listOfEmployeesBean.puid}" />
</td>
</tr>
<tr>
</tr>
<tr>
</tr>
<tr>
</tr>
<tr>
</tr>
<tr>
</tr>
<tr>
<td>
<p:commandButton value="Search" update="@form"
action="#{listOfEmployeesBean.displayListOfEmployees}" />
</td>
<td>
<p:commandButton process="multiplePuidSelect" update=":listOfEmployeesForm:multiPuidDetail" value="Apply" oncomplete="PF('multiPuidDialog').show()" />
</td>
</tr>
</table>
</center>
<br/>
<br/>
<p:dataTable id="multiplePuidSelect" value="#{listOfEmployeesBean.sacPeopleList}"
var="sacPeopleList" widgetVar="sacPeopleTable" selection="#{listOfEmployeesBean.selectedPuidsList}" rowKey="#{sacPeopleList.puid}"
emptyMessage="No Records found"
style="text-align:center;" >
<p:column headerText="BLOCK (SEC)" width="5%">
<h:selectBooleanCheckbox id="blockEnable" disabled="false"
value="#{listOfEmployeesBean.blockedMapSEC[sacPeopleList]}"
styleClass="benefSelection"
rendered="#{sacPeopleList.blockedState eq 'Blocked (CDS)' or sacPeopleList.blockedState eq 'Free' or sacPeopleList.blockedState eq 'To Unblock'}"
partialSubmit='true'/>
<h:selectBooleanCheckbox id="blockDisable" disabled="true"
value="#{listOfEmployeesBean.blockedMapSEC[sacPeopleList]}"
styleClass="benefSelection"
rendered="#{sacPeopleList.blockedState eq 'Blocked (SEC)' or sacPeopleList.blockedState eq 'Blocked (SEC)(CDS)' or sacPeopleList.blockedState eq 'Blocked (CDS)(SEC)'}"
partialSubmit='true'/>
</p:column>
<p:column headerText="UNBLOCK (SEC)" width="5%">
<h:selectBooleanCheckbox id="unblockEnable" disabled="false"
value="#{listOfEmployeesBean.blockedMapFREE[sacPeopleList]}"
styleClass="benefSelection"
rendered="#{sacPeopleList.blockedState eq 'Blocked (SEC)' or sacPeopleList.blockedState eq 'Blocked (SEC)(CDS)' or sacPeopleList.blockedState eq 'Blocked (CDS)(SEC)'}" />
<h:selectBooleanCheckbox id="unblockDisable" disabled="true"
value="#{listOfEmployeesBean.blockedMapSEC[sacPeopleList]}"
styleClass="benefSelection"
rendered="#{sacPeopleList.blockedState eq 'Blocked (CDS)' or sacPeopleList.blockedState eq 'Free' or sacPeopleList.blockedState eq 'To Unlock'}" />
</p:column>
<p:column headerText="Corp. Key" width="5%">
<h:outputText value="#{sacPeopleList.puid}" />
</p:column>
<p:column headerText="Country" width="5%">
<h:outputText value="#{sacPeopleList.c}" />
</p:column>
<p:column headerText="Last Name" width="10%">
<h:outputText value="#{sacPeopleList.sn}" />
</p:column>
<p:column headerText="First Name" width="10%">
<h:outputText value="#{sacPeopleList.givenName}" />
</p:column>
<p:column headerText="Matricule" width="5%">
<h:outputText value="#{sacPeopleList.employeeNumber}" />
</p:column>
<p:column headerText="Employee Type" width="5%">
<h:outputText value="#{sacPeopleList.employeeType}" />
</p:column>
<p:column headerText="Manager CK" width="5%">
<h:outputText value="#{sacPeopleList.manager}" />
</p:column>
<p:column headerText="Timestamp" width="10%">
<h:outputText value="#{sacPeopleList.timeStamp}" />
</p:column>
<p:column headerText="Action" width="5%">
<h:outputText value="#{sacPeopleList.action}" />
</p:column>
<p:column headerText="Blocked Comment" width="40%">
<h:outputText value="#{sacPeopleList.blockedComment}" />
</p:column>
<p:column headerText="Blocked State" width="5%">
<h:outputText value="#{sacPeopleList.blockedState}" />
</p:column>
</p:dataTable>
<br />
<br />
<p:dialog header="Confirmation Screen" widgetVar="multiPuidDialog" modal="true" showEffect="fade" hideEffect="fade" resizable="false" width="800" appendTo="@(body)">
<p:outputPanel id="multiPuidDetail" style="text-align:center;">
<p:dataTable value="#{listOfEmployeesBean.selectedPuidsList}"
var="sacPeopleList1" widgetVar="sacPeopleTable"
emptyMessage="No Records Selected"
style="text-align:center;" tableStyle="width:auto" resizableColumns="true">
<p:column headerText="PUID" width="80%">
<h:outputText value="#{sacPeopleList1.puid}" />
</p:column>
<p:column headerText="CN" width="80%">
<h:outputText value="#{sacPeopleList1.cn}" />
</p:column>
<p:column headerText= "Action To Perform" width="80%">
<h:outputText value="#{sacPeopleList1.action}" />
</p:column>
</p:dataTable>
<br>
</br>
<br/>
<center>
<table>
<tr><td>
<p:commandButton value="Update" update="@form"
action="#{listOfEmployeesBean.getUpdate}" /></td><td></td>
<td><p:commandButton process="multiplePuidSelect" update=":listOfEmployeesForm:multiPuidDetail" value="Cancel" oncomplete="PF('multiPuidDialog').hide()" /> </td>
</tr>
</table>
</center>
</p:outputPanel>
</p:dialog>
</h:form>
</ui:define>
</ui:decorate>
</ui:define>
</ui:composition>
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
@ManagedBean(name = "listOfEmployeesBean")
@RequestScoped
public class ListOfEmployeesBean implements Serializable {
private static final long serialVersionUID = 1L;
private static final Log LOG = Log.getLog(ListOfEmployeesBean.class);
private List<SacPeople> sacPeopleList;
@ManagedProperty(value = "#{sacPeopleService}")
private SacPeopleService sacPeopleService;
@ManagedProperty(value = "#{securityBean}")
private SecurityBean securityBean;
private Map<SacPeople, Boolean> blockedMapSEC;
private Map<SacPeople, Boolean> blockedMapFREE;
private String country ;
private String lastName;
private String puid ;
private SacPeople sacPeople;
@PostConstruct
public void init() {
System.out.println("init-------"+this.getClass().hashCode());
/*LOG.info("> init");
LOG.info("- user " + securityBean.getUser());
try {
blockedMapSEC = new HashMap<SacPeople, Boolean>();
blockedMapFREE = new HashMap<SacPeople, Boolean>();
country = new String();
lastName = new String();
puid = new String();
} catch (SacException sacE) {
LOG.error("SacException", sacE);
} catch (Exception e) {
LOG.error("Exception", e);
}*/
}
@PreDestroy
public void destroy() {
System.out.println("destroy-------"+this.getClass().hashCode());
}
public void getUpdate() {
LOG.info("> getUpdate");
LOG.debug("- country " + country);
LOG.debug("- lastname " + lastName);
LOG.debug("- corp key " + puid);
LOG.debug("- blockedMapSEC.size " + blockedMapSEC.size());
LOG.debug("- blockedMapFREE.size " + blockedMapFREE.size());
try {
final String user = securityBean.getUser();
if (blockedMapSEC != null && !blockedMapSEC.isEmpty()) {
final Set<SacPeople> keys = blockedMapSEC.keySet();
for (SacPeople sacPeople : keys) {
final Boolean blockBoolean = blockedMapSEC.get(sacPeople);
if (blockBoolean == true) {
if (sacPeople.getBlockedState().equalsIgnoreCase(
SacPeopleConstant.BLOCKED_CDS)) {
sacPeopleService.updateBlockedSec(
sacPeople.getPuid(),
SacPeopleConstant.BLOCKED_CDS_SEC, user);
}
if (sacPeople.getBlockedState().equalsIgnoreCase(
SacPeopleConstant.FREE)
|| (sacPeople.getBlockedState()
.equalsIgnoreCase(SacPeopleConstant.TO_UNBLOCK))) {
sacPeopleService.updateBlockedSec(
sacPeople.getPuid(),
SacPeopleConstant.BLOCKED_SEC, user);
}
}
}
}
if (blockedMapFREE != null && !blockedMapFREE.isEmpty()) {
final Set<SacPeople> keys = blockedMapFREE.keySet();
for (SacPeople sacPeople : keys) {
final Boolean blockBoolean = blockedMapFREE.get(sacPeople);
if (blockBoolean == true) {
if (sacPeople.getBlockedState().equalsIgnoreCase(
SacPeopleConstant.BLOCKED_SEC)) {
sacPeopleService.updateBlockedSec(
sacPeople.getPuid(),
SacPeopleConstant.FREE, user);
}
if (sacPeople.getBlockedState().equalsIgnoreCase(
SacPeopleConstant.BLOCKED_SEC_CDS)
|| sacPeople
.getBlockedState()
.equalsIgnoreCase(
SacPeopleConstant.BLOCKED_CDS_SEC)) {
sacPeopleService.updateBlockedSec(
sacPeople.getPuid(),
SacPeopleConstant.BLOCKED_CDS, user);
}
}
}
}
blockedMapSEC = new HashMap<SacPeople, Boolean>();
blockedMapFREE = new HashMap<SacPeople, Boolean>();
displayListOfEmployees();
} catch (SacException sacE) {
LOG.error("SacException ", sacE);
} catch (Exception e) {
LOG.error("Exception", e);
}
}
public void displayListOfEmployees() {
LOG.info(" Entering method displayListOfEmployees() of ListOfEmployeesBean");
LOG.info("PUID:" + puid);
LOG.info("LASTNAME:" + lastName);
LOG.info("Country:" + country);
blockedMapSEC = new HashMap<SacPeople, Boolean>();
blockedMapFREE = new HashMap<SacPeople, Boolean>();
try {
this.sacPeopleList = sacPeopleService.extractListOfEmployees(
country, lastName, puid);
}
catch (SacException sacE) {
LOG.error(
"SacException in displayListOfEmployees() method of ListOfEmployeesBean:"
+ sacE.getStackTrace(), sacE);
} catch (Exception e) {
LOG.error(
"Exception in displayListOfEmployees() method of ListOfEmployeesBean:"
+ e, e);
}
LOG.info(" Exit from method displayListOfEmployeees() of ListOfEmployeesBean");
}
public SacPeopleService getSacPeopleService() {
return sacPeopleService;
}
public void setSacPeopleService(SacPeopleService sacPeopleService) {
this.sacPeopleService = sacPeopleService;
}
public List<SacPeople> getSacPeopleList() {
return sacPeopleList;
}
public void setSacPeopleList(List<SacPeople> sacPeopleList) {
this.sacPeopleList = sacPeopleList;
}
public Map<SacPeople, Boolean> getBlockedMapFREE() {
return blockedMapFREE;
}
public Map<SacPeople, Boolean> getBlockedMapSEC() {
return blockedMapSEC;
}
public void setBlockedMapFREE(Map<SacPeople, Boolean> blockedMapFREE) {
System.out.println("In setBlockedMapFREE");
this.blockedMapFREE = blockedMapFREE;
}
public void setBlockedMapSEC(Map<SacPeople, Boolean> blockedMapSEC) {
this.blockedMapSEC = blockedMapSEC;
}
public void setCountry(String country) {
this.country = country;
}
public String getCountry() {
return country;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getPuid() {
return puid;
}
public void setPuid(String puid) {
this.puid = puid;
}
public void onRowSelect(SelectEvent event) {
System.out.println("In onRowSelect");
FacesMessage msg = new FacesMessage("Puid Selected",
((SacPeople) event.getObject()).getPuid());
FacesContext.getCurrentInstance().addMessage(null, msg);
}
public void onRowUnselect(UnselectEvent event) {
System.out.println("In onRowUnselect");
FacesMessage msg = new FacesMessage("Puid UnSelected",
((SacPeople) event.getObject()).getPuid());
FacesContext.getCurrentInstance().addMessage(null, msg);
}
private List<SacPeople> selectedPuidsList;
public List<SacPeople> getSelectedPuidsList() {
return selectedPuidsList;
}
public void setSelectedPuidsList(List<SacPeople> selectedPuidsList) {
System.out.println("In setSelectedPuidsList");
selectedPuidsList = new ArrayList<SacPeople>();
try {
System.out.println("blockedMapSEC ::> " + blockedMapSEC);
if (blockedMapSEC != null && !blockedMapSEC.isEmpty()) {
Set<SacPeople> keys = blockedMapSEC.keySet();
for (SacPeople sacPeople : keys) {
Boolean blockBoolean = blockedMapSEC.get(sacPeople);
if (blockBoolean == true) {
sacPeople.setAction("BLOCK (SEC)");
selectedPuidsList.add(sacPeople);
System.out.println("sacPeople puid :::::> "
+ sacPeople.getPuid());
}
}
}
System.out.println("blockedMapFREE ::> " + blockedMapFREE);
if (blockedMapFREE != null && !blockedMapFREE.isEmpty()) {
Set<SacPeople> keys1 = blockedMapFREE.keySet();
for (SacPeople sacPeople : keys1) {
Boolean blockBoolean = blockedMapFREE.get(sacPeople);
if (blockBoolean == true) {
sacPeople.setAction("UNBLOCK (SEC)");
selectedPuidsList.add(sacPeople);
System.out.println("sacPeople puid :::::> "
+ sacPeople.getPuid());
}
}
}
}
catch (SacException sacE) {
LOG.error(
"SacException in setSelectedPuidsList() method of ListOfEmployeesBean:"
+ sacE.getStackTrace(), sacE);
} catch (Exception e) {
LOG.error(
"Exception in setSelectedPuidsList() method of ListOfEmployeesBean:"
+ e, e);
}
this.selectedPuidsList = selectedPuidsList;
System.out.println("Out setSelectedPuidsList");
}
public SacPeople getSacPeople() {
return sacPeople;
}
public void setSacPeople(SacPeople sacPeople) {
this.sacPeople = sacPeople;
}
public SecurityBean getSecurityBean() {
return securityBean;
}
public void setSecurityBean(SecurityBean securityBean) {
this.securityBean = securityBean;
}
}
Attached code working in tomcat 7 but not in was liberty 8.5 server
Its because your bean is @RequestScoped.
See this post and answer #1: https://stackoverflow.com/questions/907 ... me-request
I am surprised it was working before in Tomcat 7.
See this post and answer #1: https://stackoverflow.com/questions/907 ... me-request
I am surprised it was working before in Tomcat 7.
PrimeFaces Developer | PrimeFaces Extensions Developer
GitHub Profile: https://github.com/melloware
PrimeFaces Elite 13.0.0 / PF Extensions 13.0.0
PrimeReact 9.6.1
GitHub Profile: https://github.com/melloware
PrimeFaces Elite 13.0.0 / PF Extensions 13.0.0
PrimeReact 9.6.1
Well a really simple solution is that it only gets called once per lifecycle is use an initialized flag.
Code: Select all
@ManagedBean(name = "listOfEmployeesBean")
@RequestScoped
public class ListOfEmployeesBean implements Serializable {
private boolean initialized = false;
@PostConstruct
public void init() {
if (initialized) {
return;
}
...
...
this.initialized = true;
}
}
PrimeFaces Developer | PrimeFaces Extensions Developer
GitHub Profile: https://github.com/melloware
PrimeFaces Elite 13.0.0 / PF Extensions 13.0.0
PrimeReact 9.6.1
GitHub Profile: https://github.com/melloware
PrimeFaces Elite 13.0.0 / PF Extensions 13.0.0
PrimeReact 9.6.1
-
- PrimeFaces Core Developer
- Posts: 3979
- Joined: 03 Dec 2010, 14:11
- Location: Bavaria, DE
- Contact:
@PostConstruct must only be called once for the defined lifetime. Everything else is a bug. Maybe you use the wrong @RequestScoped? Otherwise, ask the WAS guys
Thomas Andraschko
PrimeFaces | PrimeFaces Extensions
Apache Member | OpenWebBeans, DeltaSpike, MyFaces, BVal, TomEE
Sponsor me: https://github.com/sponsors/tandraschko
Blog: http://tandraschko.blogspot.de/
Twitter: https://twitter.com/TAndraschko
PrimeFaces | PrimeFaces Extensions
Apache Member | OpenWebBeans, DeltaSpike, MyFaces, BVal, TomEE
Sponsor me: https://github.com/sponsors/tandraschko
Blog: http://tandraschko.blogspot.de/
Twitter: https://twitter.com/TAndraschko
Yep this is a WAS question not a PF question.
PrimeFaces Developer | PrimeFaces Extensions Developer
GitHub Profile: https://github.com/melloware
PrimeFaces Elite 13.0.0 / PF Extensions 13.0.0
PrimeReact 9.6.1
GitHub Profile: https://github.com/melloware
PrimeFaces Elite 13.0.0 / PF Extensions 13.0.0
PrimeReact 9.6.1
-
- Information
-
Who is online
Users browsing this forum: No registered users and 20 guests