Master/Detail displays all levels.

Community Driven Extensions Project
Post Reply
gbadavidson
Posts: 1
Joined: 22 Jul 2013, 16:53

07 Aug 2015, 16:28

Hi all,
I am new to Primefaces and I want to use the MasterDetail tag but apparently I have done something incorrectly when trying to do a simple master detail page. I would be extremely grateful if someone could point out how to correct this.

My Xhtml page looks like this:

<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:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
xmlns:pe="http://primefaces.org/ui/extensions">
<h:head>
<title>Interesting Moment Maintenance</title>
<h:outputStylesheet library="css" name="style.css" />


</h:head>
<ui:composition template="/WEB-INF/templates/BasicTemplate.xhtml">
<ui:define name="content">
<h:body>
<h2>Interesting Moment Maintenance</h2>
<pe:masterDetail id="MasterDetail" showBreadcrumb="false"
level="#{interestingEventBean.currentLevel}">

<f:facet name="header">
<p:messages showDetail="false" showSummary="true" />
</f:facet>

<pe:masterDetailLevel level="1" levelLabel="Event_Master_List">
<p:dataTable id="events" value="#{interestingEventBean.events}"
var="evts" styleClass="data-table" headerClass="data-table-header"
rowClasses="data-table-odd-row,data-table-even-row">
<p:column headerText="EventID">
<p:commandLink value="#{evts.eventId}">
<pe:selectDetailLevel contextValue="#{evts}" />
</p:commandLink>
</p:column>
<p:column headerText="ProductId">
<h:outputText value="#{evts.productId}" />
</p:column>
<p:column headerText="Attribute Name">
<h:outputText value="#{evts.attributeName}" />
</p:column>
<p:column headerText="Post Immediately ">
<h:outputText value="#{evts.interestingEvent}" />
</p:column>
<p:column headerText="Post Once ">
<h:outputText value="#{evts.postOnce}" />
</p:column>
</p:dataTable>

</pe:masterDetailLevel>

<pe:masterDetailLevel level="2" contextVar="event"
levelLabel="Event Detail">
<h:panelGrid id="eventDetail" columns="2"
columnClasses="formColumn1,formColumn2">
<h:outputText value="EventID" />
<p:inputText value="#{event.eventId}" required="true"
label="EventID" />
<h:outputText value="ProductID" />
<p:inputText value="#{event.productId}" required="true"
label="ProductId" />
<h:outputText value="Attribute Name" />
<p:inputText value="#{event.attributeName}" required="true"
label="Attribute Name" />
<h:outputText value="Post Immediately" />
<p:inputText value="#{event.interestingEvent}" required="true"
label="Post Immediately" />
<h:outputText value="Post Once" />
<p:inputText value="#{event.postOnce}" required="true"
label="Post Once" />
<h:outputText value="Language skills" />
</h:panelGrid>


</pe:masterDetailLevel>
</pe:masterDetail>
</h:body>
</ui:define>
</ui:composition>

</html>

The controller bean is :

package com.ca.entitlement.managedbeans;

import java.util.ArrayList;
import java.util.List;

import javax.el.ELContext;
import javax.faces.FacesException;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import com.ca.entitlement.model.InterestingEvent;

public class InterestingEventBean {
private List<InterestingEvent> events;
private int currentLevel = 0;
private InterestingEvent selected;

public InterestingEventBean() {
if (events == null) {
events = new ArrayList<InterestingEvent>();
InterestingEvent ie = new InterestingEvent();
ie.setEventId("User Logged In");
ie.setAttributeName("the trial user has logged into the product");
events.add(ie);
InterestingEvent ie1 = new InterestingEvent();
ie1.setEventId("Trial Expiring");
ie1.setAttributeName("The trial will expire within 5 days");
events.add(ie1);
}
}

public List<InterestingEvent> getEvents() {
return events;
}

public String saveSuccess(InterestingEvent person) {
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO,
"Event has been saved", null);
FacesContext.getCurrentInstance().addMessage(null, message);

return null;
}

public String saveFailure(InterestingEvent person) {
FacesContext fc = FacesContext.getCurrentInstance();
ELContext elContext = fc.getELContext();

SelectLevelListener selectLevelListener;
try {
selectLevelListener = (SelectLevelListener) elContext
.getELResolver().getValue(elContext, null,
"selectLevelListener");
selectLevelListener.setErrorOccured(true);
} catch (RuntimeException e) {
throw new FacesException(e.getMessage(), e);
}

FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
"event " + person.getEventId() + " could not be saved", null);
FacesContext.getCurrentInstance().addMessage(null, message);

return null;
}

public String delete(InterestingEvent event) {
for (InterestingEvent evts : events) {
if (evts.getEventId().equals(event.getEventId())) {
events.remove(evts);

break;
}
}

return null;
}

public int getCurrentLevel() {
if (currentLevel==0) {
currentLevel=1;
} else {
if (currentLevel==1) {
currentLevel=2;
} else {
if (currentLevel==2) {
currentLevel=1;
}
}
}
return currentLevel;
}

public void setCurrentLevel(int currentLevel) {
this.currentLevel = currentLevel;
}

public void setEvents(List<InterestingEvent> events) {
this.events = events;
}

public InterestingEvent getSelected() {
return selected;
}

public void setSelected(InterestingEvent selected) {
this.selected = selected;
}

}

when I run the code I get : (Note: I have to fix the CSS file and the second scrren blow had the text entry boxes which didn't copy here)





Interesting Moment Maintenance




EventID ProductId Attribute Name Post Immediately Post Once
User Logged In the trial user has logged into the product false false
Trial Expiring The trial will expire within 5 days false false

EventID
ProductID
Attribute Name
Post Immediately
Post Once




All material Copyrighted 2015 CA Technolgies. All rights reserved unless otherwise noted

Post Reply

Return to “Extensions”

  • Information
  • Who is online

    Users browsing this forum: No registered users and 31 guests