Bonjour,
Un utilisateur utilise une combo-box Primefaces en autocomplete.
Parce qu'il délaisse l'application un certain temps ensuite, la session tombe. Et plus tard, il entreprend de faire sur la page où il est une nouvelle sélection dans cette même combo-box. Il ignore bien sûr que la session est tombée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 <p:autoComplete id="listeCommunes" styleClass="combo" dropdown="true" maxlength="70" var="commune" itemValue="#{commune.codeCommune}" itemLabel="#{commune == null ? '' : geographie.presentationVille(commune)}" value="#{accueil.codeCommune}" converter="codeCommuneConverter" completeMethod="#{geographie.autoCompleteCommune}"> <p:ajax event="itemSelect" process="@form" update=":carteForm :accrocheContourForm :accrocheNomCommuneForm :imageBackgroundCommuneForm" /> </p:autoComplete>
Un errorHandler s'enclenche :
dont j'espère qu'avec mes managed beans sérialisables et le partial state saving que j'ai mis dans mon web.xml, l'application parviendra à restaurer la session que je m'autorise à réactiver à loisir tant que l'internaute n'est pas authentifié, c'est à dire qu'il est un simple visiteur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 if (t instanceof ViewExpiredException) { fc.setViewRoot(fc.getApplication().getViewHandler().createView(fc, "/index.xhtml")); fc.getPartialViewContext().setRenderAll(true); fc.renderResponse(); }
Mais cela ne suffit pas : mon application échoue en NullPointerException au moment où l'utilisateur entreprend une nouvelle sélection :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <context-param> <param-name>javax.faces.PARTIAL_STATE_SAVING</param-name> <param-value>true</param-value> </context-param>
Un grepcode sur le composant AutoCompleteRenderer.java de Primefaces m'indique cet emplacement comme origine du NullPointerException, et c'est plausible :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 18-Apr-2016 09:05:18.210 SEVERE [http-nio-8080-exec-22] com.sun.faces.application.view.FaceletViewHandlingStrategy.handleRenderException Error Rendering View[/index.xhtml] java.lang.NullPointerException at org.primefaces.component.autocomplete.AutoCompleteRenderer.encodeSuggestionsAsList(AutoCompleteRenderer.java:516) at org.primefaces.component.autocomplete.AutoCompleteRenderer.encodeSuggestions(AutoCompleteRenderer.java:411) at org.primefaces.component.autocomplete.AutoCompleteRenderer.encodeResults(AutoCompleteRenderer.java:122) at org.primefaces.component.autocomplete.AutoCompleteRenderer.encodeEnd(AutoCompleteRenderer.java:104) at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:924) [...]
Avez-vous des suggestions à me faire pour résoudre ce problème ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 protected void encodeSuggestionsAsList(FacesContext context, AutoComplete ac, List items, Converter converter) throws IOException { ResponseWriter writer = context.getResponseWriter(); String var = ac.getVar(); Map<String,Object> requestMap = context.getExternalContext().getRequestMap(); boolean pojo = var != null; UIComponent itemtip = ac.getFacet("itemtip"); boolean hasGroupByTooltip = (ac.getValueExpression("groupByTooltip") != null); writer.startElement("ul", ac); writer.writeAttribute("class", AutoComplete.LIST_CLASS, null); for(Object item : items) { writer.startElement("li", null); writer.writeAttribute("class", AutoComplete.ITEM_CLASS, null);
Partager