0

When try with basic primefaces extension sample, while launch the page am getting below error,

Environment Detail:

  1. Java 8
  2. wildfly 8.0
  3. Primefaces-5.2
  4. Primefaces-extension-3.1.0
  5. commons-lang-3.3.1
  6. gson-2.3
  7. mojarra-2.2.8

Error:

2015-05-25 14:51:59,224 FATAL [javax.enterprise.resource.webcontainer.jsf.context] (default task-2) JSF1073: java.lang.StackOverflowError caught during processing of RENDER_RESPONSE 6 : UIComponent-ClientId=, Message=null
2015-05-25 14:51:59,236 FATAL [javax.enterprise.resource.webcontainer.jsf.context] (default task-2) No associated message: java.lang.StackOverflowError
    at java.util.concurrent.atomic.AtomicReferenceArray.get(AtomicReferenceArray.java:125) [rt.jar:1.8.0_20]
    at com.google.common.cache.LocalCache$Segment.getFirst(LocalCache.java:2688)
    at com.google.common.cache.LocalCache$Segment.getEntry(LocalCache.java:2695)
    at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2176)
    at com.google.common.cache.LocalCache.get(LocalCache.java:3932)
    at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3936)
    at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4806)
    at org.jboss.weld.util.cache.LoadingCacheUtils.getCacheValue(LoadingCacheUtils.java:52) [weld-core-impl-2.1.1.Final.jar:2013-12-03 09:59]
    at org.jboss.weld.resolution.NameBasedResolver.resolve(NameBasedResolver.java:92) [weld-core-impl-2.1.1.Final.jar:2013-12-03 09:59]
    at org.jboss.weld.manager.BeanManagerImpl.getBeans(BeanManagerImpl.java:826) [weld-core-impl-2.1.1.Final.jar:2013-12-03 09:59]
    at org.jboss.weld.el.AbstractWeldELResolver.lookup(AbstractWeldELResolver.java:102) [weld-core-impl-2.1.1.Final.jar:2013-12-03 09:59]
    at org.jboss.weld.el.AbstractWeldELResolver.getValue(AbstractWeldELResolver.java:91) [weld-core-impl-2.1.1.Final.jar:2013-12-03 09:59]
    at org.jboss.as.jsf.injection.weld.ForwardingELResolver.getValue(ForwardingELResolver.java:46) [wildfly-jsf-injection-8.0.0.CR1.jar:8.0.0.CR1]
    at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:188) [javax.el-3.0-b07.jar:3.0-b07]
    at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176) [jsf-impl-2.2.8.jar:2.2.8]
    at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203) [jsf-impl-2.2.8.jar:2.2.8]
    at com.sun.el.parser.AstIdentifier.getValue(AstIdentifier.java:116) [javax.el-3.0-b07.jar:3.0-b07]
    at com.sun.el.parser.AstValue.getBase(AstValue.java:151) [javax.el-3.0-b07.jar:3.0-b07]
    at com.sun.el.parser.AstValue.getValue(AstValue.java:200) [javax.el-3.0-b07.jar:3.0-b07]
    at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:226) [javax.el-3.0-b07.jar:3.0-b07]
    at org.jboss.weld.el.WeldValueExpression.getValue(WeldValueExpression.java:50) [weld-core-impl-2.1.1.Final.jar:2013-12-03 09:59]
    at org.jboss.weld.el.WeldValueExpression.getValue(WeldValueExpression.java:50) [weld-core-impl-2.1.1.Final.jar:2013-12-03 09:59]
    at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109) [jsf-impl-2.2.8.jar:2.2.8]
    at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194) [jsf-api-2.2.8.jar:2.2]
    at org.primefaces.extensions.component.base.AbstractDynamicData.getValue(AbstractDynamicData.java:110) [primefaces-extensions-3.1.0.jar:3.1.0]
    at org.primefaces.extensions.component.dynaform.DynaForm.invokeOnChildren(DynaForm.java:243) [primefaces-extensions-3.1.0.jar:3.1.0]
    at org.primefaces.extensions.component.base.AbstractDynamicData.invokeOnComponent(AbstractDynamicData.java:437) [primefaces-extensions-3.1.0.jar:3.1.0]
    at org.primefaces.extensions.component.dynaform.DynaForm.invokeOnChildren(DynaForm.java:256) [primefaces-extensions-3.1.0.jar:3.1.0]
    at org.primefaces.extensions.component.base.AbstractDynamicData.invokeOnComponent(AbstractDynamicData.java:437) [primefaces-extensions-3.1.0.jar:3.1.0]

XHTML

<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:f="http://xmlns.jcp.org/jsf/core"
  xmlns:h="http://xmlns.jcp.org/jsf/html"      
  xmlns:p="http://primefaces.org/ui"
  xmlns:ui="http://java.sun.com/jsf/facelets"
  xmlns:pe="http://primefaces.org/ui/extensions"
  >
<h:head>
    <title>Facelet Title</title>
</h:head>
<h:body>
    <h:form prependId="false">
        <h:panelGroup id="dynaFormGroup">  
            <p:messages id="messages" showSummary="true"/>  

            <pe:dynaForm id="dynaForm" value="#{dynaFormController.model}" var="data">  
                <pe:dynaFormControl type="input" for="txt">  
                    <p:inputText id="txt" value="#{data.value}" required="#{data.required}"/>  
                </pe:dynaFormControl>  
                <pe:dynaFormControl type="calendar" for="cal" styleClass="calendar">  
                    <p:calendar id="cal" value="#{data.value}" required="#{data.required}" showOn="button"/>  
                </pe:dynaFormControl>  
                <pe:dynaFormControl type="select" for="sel" styleClass="select">  
                    <p:selectOneMenu id="sel" value="#{data.value}" required="#{data.required}">  
                        <f:selectItems value="#{dynaFormController.languages}"/>  
                    </p:selectOneMenu>  
                </pe:dynaFormControl>  
                <pe:dynaFormControl type="textarea" for="tarea">  
                    <p:inputTextarea id="tarea" value="#{data.value}" required="#{data.required}" autoResize="false"/>  
                </pe:dynaFormControl>  
                <pe:dynaFormControl type="rating" for="rat">  
                    <p:rating id="rat" value="#{data.value}" required="#{data.required}"/>  
                </pe:dynaFormControl>  

                <f:facet name="buttonBar">  
                    <p:commandButton value="Submit" action="#{dynaFormController.submitForm}"  
                                     process="dynaForm" update=":mainForm:dynaFormGroup :mainForm:inputValues"  
                                     oncomplete="handleComplete(xhr, status, args)"/>  
                    <p:commandButton type="reset" value="Reset" style="margin-left: 5px;"/>  
                </f:facet>  
            </pe:dynaForm>  
        </h:panelGroup>  

        <p:dialog header="Input values" widgetVar="inputValuesWidget">  
            <p:dataList id="inputValues" value="#{dynaFormController.bookProperties}" var="bookProperty"  
                        style="margin:10px;">  
                <h:outputText value="#{bookProperty.name}: #{bookProperty.formattedValue}"  
                              style="margin-right: 10px;"/>  
            </p:dataList>  
        </p:dialog>  

        <h:outputScript id="dynaFormScript" target="body">  
            /* <![CDATA[ */ 
            function handleComplete(xhr, status, args) { 
            if(args && args.isValid) { 
            PF('inputValuesWidget').show(); 
            } else { 
            PF('inputValuesWidget').hide(); 
            } 
            } 
            /* ]]> */  
        </h:outputScript>  

        <h:outputStylesheet id="dynaFormCSS">  
            /* note: trick with colspan is needed for IE8 */  
            .pe-dynaform-cell input,  
            .pe-dynaform-cell textarea,  
            .pe-dynaform-cell[colspan="1"] input,  
            .pe-dynaform-cell[colspan="1"] textarea {  
            width: 150px;  
            }  

            /* note: trick with colspan is needed for IE8 */  
            .pe-dynaform-cell.calendar input,  
            .pe-dynaform-cell[colspan="1"].calendar input {  
            width: 120px;  
            }  

            .pe-dynaform-cell.select .ui-selectonemenu {  
            width: 157px !important;  
            }  

            .pe-dynaform-cell.select .ui-selectonemenu .ui-selectonemenu-label {  
            width: 130px !important;  
            }  
        </h:outputStylesheet> 
    </h:form>
</h:body>

DynaFormController:

@Named
@ViewScoped
public class DynaFormController implements Serializable {  

private static final long serialVersionUID = 20120423L;  

private DynaFormModel model;  

private static List<SelectItem> LANGUAGES = new ArrayList<SelectItem>();  

@PostConstruct  
protected void initialize() {  
    model = new DynaFormModel();  

    // add rows, labels and editable controls  
    // set relationship between label and editable controls to support outputLabel with "for" attribute  

    // 1. row  
    DynaFormRow row = model.createRegularRow();  

    DynaFormLabel label11 = row.addLabel("Author");  
    DynaFormControl control12 = row.addControl(new BookProperty("Author", true), "input");  
    label11.setForControl(control12);  

    DynaFormLabel label13 = row.addLabel("ISBN");  
    DynaFormControl control14 = row.addControl(new BookProperty("ISBN", true), "input");  
    label13.setForControl(control14);  

    // 2. row  
    row = model.createRegularRow();  

    DynaFormLabel label21 = row.addLabel("Title");  
    DynaFormControl control22 = row.addControl(new BookProperty("Title", false), "input", 3, 1);  
    label21.setForControl(control22);  

    // 3. row  
    row = model.createRegularRow();  

    DynaFormLabel label31 = row.addLabel("Publisher");  
    DynaFormControl control32 = row.addControl(new BookProperty("Publisher", false), "input");  
    label31.setForControl(control32);  

    DynaFormLabel label33 = row.addLabel("Published on");  
    DynaFormControl control34 = row.addControl(new BookProperty("Published on", false), "calendar");  
    label33.setForControl(control34);  

    // 4. row  
    row = model.createRegularRow();  

    DynaFormLabel label41 = row.addLabel("Language");  
    DynaFormControl control42 = row.addControl(new BookProperty("Language", false), "select");  
    label41.setForControl(control42);  

    DynaFormLabel label43 = row.addLabel("Description", 1, 2);  
    DynaFormControl control44 = row.addControl(new BookProperty("Description", false), "textarea", 1, 2);  
    label43.setForControl(control44);  

    // 5. row  
    row = model.createRegularRow();  

    DynaFormLabel label51 = row.addLabel("Rating");  
    DynaFormControl control52 = row.addControl(new BookProperty("Rating", 3, true), "rating");  
    label51.setForControl(control52);  
}  

public DynaFormModel getModel() {  
    return model;  
}  

public List<BookProperty> getBookProperties() {  
    if (model == null) {  
        return null;  
    }  

    List<BookProperty> bookProperties = new ArrayList<BookProperty>();  
    for (DynaFormControl dynaFormControl : model.getControls()) {  
        bookProperties.add((BookProperty) dynaFormControl.getData());  
    }  

    return bookProperties;  
}  

public String submitForm() {  
    FacesMessage.Severity sev = FacesContext.getCurrentInstance().getMaximumSeverity();  
    boolean hasErrors = (sev != null && (FacesMessage.SEVERITY_ERROR.compareTo(sev) >= 0)); 

    RequestContext requestContext = RequestContext.getCurrentInstance();  
    requestContext.addCallbackParam("isValid", !hasErrors);  

    return null;  
}  

public List<SelectItem> getLanguages() {  
    if (LANGUAGES.isEmpty()) {  
        LANGUAGES.add(new SelectItem("en", "English"));  
        LANGUAGES.add(new SelectItem("de", "German"));  
        LANGUAGES.add(new SelectItem("ru", "Russian"));  
        LANGUAGES.add(new SelectItem("tr", "Turkish"));  
    }  

    return LANGUAGES;  
}  
}  

BookProperty:

public class BookProperty implements Serializable {  

private static final long serialVersionUID = 20120521L;  

private String name;  
private Object value;  
private boolean required;  

public BookProperty(String name, boolean required) {  
    this.name = name;  
    this.required = required;  
}  

public BookProperty(String name, Object value, boolean required) {  
    this.name = name;  
    this.value = value;  
    this.required = required;  
}  

public String getName() {  
    return name;  
}  

public void setName(String name) {  
    this.name = name;  
}  

public Object getValue() {  
    return value;  
}  

public Object getFormattedValue() {  
    if (value instanceof Date) {  
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("d MMM yyyy");  

        return simpleDateFormat.format(value);  
    }  

    return value;  
}  

public void setValue(Object value) {  
    this.value = value;  
}  

public boolean isRequired() {  
    return required;  
}  

public void setRequired(boolean required) {  
    this.required = required;  
}  
}  
Jeevanantham
  • 984
  • 3
  • 19
  • 48
  • @JordiCastilla, code is same as http://www.primefaces.org/showcase-ext/sections/dynaform/basicUsage.jsf to reduce the question size i haven;t included it in here – Jeevanantham May 25 '15 at 10:18
  • Code can't be exactely the same since it does not happen there afaics. And do include it, since the link you refer to might disappear in the future and it will be difficult for others to use this post – Kukeltje May 25 '15 at 10:43
  • @JordiCastilla included the code – Jeevanantham May 25 '15 at 10:56
  • @Kukeltje, included the code – Jeevanantham May 25 '15 at 10:56
  • If you want someone to help you, create an [MCVE](https://stackoverflow.com/help/mcve). You're asking for free help: the least you could do is to make it easier on us. – DavidS Jul 30 '15 at 17:17

1 Answers1

1

I was having the same problem, and fixed it by adding the id attribute to the form tag to:

<h:form id="mainForm" prependId="false">
  <h:panelGroup id="dynaFormGroup"> 

---- EDIT -----

When you look at the code posted, you can see that the command button has the fully qualified id of the components in the update attribute :mainForm:dynaFormGroup

<p:commandButton value="Submit" action="#{dynaFormController.submitForm}"
  process="dynaForm" update=":mainForm:dynaFormGroup :mainForm:inputValues"
  oncomplete="handleComplete(xhr, status, args)"/>

That's why the form should have the id="mainform"

On the other hand, why when the id is missing causes the java.lang.StackOverflowError, is something i still don't know. If I found the reason i will update.

femago
  • 40
  • 1
  • 6