2 votes

Erreur d'accès à une propriété à partir d'une sous-classe en JSF

Lors de l'accès à une propriété à partir d'une sous-classe en JSF, il échoue avec l'erreur ci-dessous :

javax.el.PropertyNotFoundException: /grouptable/Create.xhtml @19,281 value="#{grouptableController.selected.grouptablePK.groupid}": Cible inaccessible, 'null' a retourné null
à com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:93)
à com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getConvertedValue(HtmlBasicInputRenderer.java:95)
à javax.faces.component.UIInput.getConvertedValue(UIInput.java:1008)
à javax.faces.component.UIInput.validate(UIInput.java:934)
à javax.faces.component.UIInput.executeValidate(UIInput.java:1189)
à javax.faces.component.UIInput.processValidators(UIInput.java:691)
à javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1080)
à javax.faces.component.UIForm.processValidators(UIForm.java:243)
à javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1080)
à javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1080)
à javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1180)
à com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76)
à com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
à com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
à javax.faces.webapp.FacesServlet.service(FacesServlet.java:312)
à org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)
à org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
à org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
à org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
à com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
à com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
à org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
à org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:332)
à org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:233)
à com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
à com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
à com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
à com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
à com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
à com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
à com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
à com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
à com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
à com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
à com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
à com.sun.grizzly.ContextTask.run(ContextTask.java:69)
à com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
à com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
à java.lang.Thread.run(Thread.java:637)

Est-ce que quelqu'un a déjà vu cela auparavant ? S'il vous plaît aidez. J'utilise glassfish v3.

2voto

BalusC Points 498232
valeur="#{grouptableController.selected.grouptablePK.groupid}": 
Cible introuvable, 'null'

Cela signifie essentiellement qu'une des propriétés imbriquées est null. Dans ce contexte, il peut s'agir de selected ou de grouptablePK qui ont renvoyé null. Ils ne devraient pas être nuls chaque fois que JSF doit définir la propriété groupid.

Vous devez pré-instanter ces objets/beans imbriqués vous-même. JSF/EL ne le fera pas pour vous.

Ainsi, au lieu de

public class ParentBean {
    private ChildBean childBean;
}

vous devez faire

public class ParentBean {
    private ChildBean childBean = new ChildBean();
}

ou

public class ParentBean {
    private ChildBean childBean;
    public ParentBean() {
        this.childBean = new ChildBean();
    }
}

Alternativement, si le ChildBean est également un bean géré, ou peut l'être, vous pouvez également utiliser l'injection de propriété gérée dans faces-config.xml:

    parentBean
    com.example.ParentBean
    request

        childBean
        #{childBean}

    childBean
    com.example.ChildBean
    request

0voto

Jon Points 4349

Si vous avez du mal à interpréter l'erreur, cela signifie que sur votre page Facelets, il ne parvient pas à comprendre ce que vous voulez dire par :

#{grouptableController.selected.grouptablePK.groupid}

J'espère que cela vous aidera.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X