Fórumok

Friendly url e paginazione risultati

Fabio De Pra, módosítva 10 év-val korábban

Friendly url e paginazione risultati

New Member Bejegyzések: 24 Csatlakozás dátuma: 2013.11.04. Legújabb bejegyzések
Ciao a tutti,
ho un problema con l'utilizzo del paginatore di liferay in combinazione con le friendly url.

In un progetto abbiamo creato diversi portlet e definito le friendly url per accedervi.
Un portlet in particolare si occupa della presentazione dei risultati di una ricerca e abbiamo inserito il paginatore fornito da liferay.

Il portlet di visualizzazione dei risultati mostra i risultati paginati solo che i link per spostarsi sulle pagine non sono compatibili con le friendly url e qundi non è possibile navigare le pagine del risultato (rimanda all'url di default).

Qualcuno ha già affrontato questo problema?

Grazie!
thumbnail
Daniele Baggio, módosítva 10 év-val korábban

RE: Friendly url e paginazione risultati

Expert Bejegyzések: 336 Csatlakozás dátuma: 2008.12.05. Legújabb bejegyzések
Facci avere il friendly-url-mapper.xml che usi e cerchiamo di capire.
Fabio De Pra, módosítva 10 év-val korábban

RE: Friendly url e paginazione risultati

New Member Bejegyzések: 24 Csatlakozás dátuma: 2013.11.04. Legújabb bejegyzések
Il codice del mapper è il seguente

<!--?xml version="1.0"?-->


<routes>
    <route>
        <pattern>/cat/{cat_id}/{cat_title}</pattern>
        <implicit-parameter name="p_p_lifecycle">1</implicit-parameter>
        <implicit-parameter name="javax.portlet.action">getCategoryList</implicit-parameter>
    </route>
     <route>
        <pattern>/list/{delta}/{cur}/{keywords}/{advancedSearch}/{andOperator}/{resetCur}</pattern>
        <implicit-parameter name="p_p_lifecycle">1</implicit-parameter>
        <implicit-parameter name="javax.portlet.action">getReferenceList</implicit-parameter>
    </route>
    <route>
        <pattern>/{article_id}/{title}</pattern>
        <implicit-parameter name="p_p_lifecycle">1</implicit-parameter>
        <implicit-parameter name="javax.portlet.action">getViewDetail</implicit-parameter>
    </route>
    
    <route>
        <pattern>/</pattern>
        <implicit-parameter name="p_p_lifecycle">0</implicit-parameter>
    </route>
</routes>


L'url "incriminata" è quella list. Ho provato a mettere i parametri presenti nei link dei bottoni avanti/ultimo ma senza successo.

url finale pagina: http://localhost:8080/it/references/-/ref/list/0/0/_/false/true/0
url bottone successivo: http://localhost:8080/it/web/web/references/-/ref/?_referencepage_WAR_productsportlet_delta=2&_referencepage_WAR_productsportlet_keywords=&_referencepage_WAR_productsportlet_advancedSearch=false&_referencepage_WAR_productsportlet_andOperator=true&_referencepage_WAR_productsportlet_resetCur=false&_referencepage_WAR_productsportlet_cur=2
url bottone ultimo: http://localhost:8080/it/web/web/references/-/ref/?_referencepage_WAR_productsportlet_delta=2&_referencepage_WAR_productsportlet_keywords=&_referencepage_WAR_productsportlet_advancedSearch=false&_referencepage_WAR_productsportlet_andOperator=true&_referencepage_WAR_productsportlet_resetCur=false&_referencepage_WAR_productsportlet_cur=3

Cliccando su successivo o ultimo il browser viene reindirizzato a questo indirizzo
http://localhost:8080/it/web/web/references/-/ref/?_referencepage_WAR_productsportlet_delta=2&_referencepage_WAR_productsportlet_keywords=&_referencepage_WAR_productsportlet_advancedSearch=false&_referencepage_WAR_productsportlet_andOperator=true&_referencepage_WAR_productsportlet_resetCur=false&_referencepage_WAR_productsportlet_cur=2

che risulta essere l'url di default

Se può essere utile l'invocazione del portlet avviene attraverso la friendly url in chiaro anziché tramite l'id della portlet.
Fabio De Pra, módosítva 10 év-val korábban

RE: Friendly url e paginazione risultati

New Member Bejegyzések: 24 Csatlakozás dátuma: 2013.11.04. Legújabb bejegyzések
Ciao a tutti, non vedo i messaggi degli altri utenti.
Come mai?
thumbnail
Pier Paolo Ramon, módosítva 10 év-val korábban

RE: Friendly url e paginazione risultati

Junior Member Bejegyzések: 90 Csatlakozás dátuma: 2010.05.25. Legújabb bejegyzések
Per i messaggi è un errore nostro non ti preoccupare.

Per il tuo problema, probabilmente è perché quelle sono Render URL, mentre il mapping è per le Action URL. Può essere?
Fabio De Pra, módosítva 10 év-val korábban

RE: Friendly url e paginazione risultati

New Member Bejegyzések: 24 Csatlakozás dátuma: 2013.11.04. Legújabb bejegyzések
Ciao,
in effetti l'invocazione del portlet avviene tramite un'action che di fatto setta un render parameter.
Il codice è il seguente:


@ProcessAction(name="getReferenceList") 
    public void viewReferenceList (ActionRequest request, ActionResponse response) throws Exception {
        response.setRenderParameter("jspPage", this.searchPageJSP);
    }


La via corretta è settare direttamente il parametro jspPage nel file friendly-url-routes.xml?

Grazie!
Fabio De Pra, módosítva 10 év-val korábban

RE: Friendly url e paginazione risultati

New Member Bejegyzések: 24 Csatlakozás dátuma: 2013.11.04. Legújabb bejegyzések
Ho sistemato un po' di problemi che aveva il portlet in quanto la paginazione non funzionava anche senza friendly url.

Ho ripristinato le friendly url in questo modo


<!--?xml version="1.0"?-->


<routes>
    <route>
        <pattern>/cat/{cat_id}/{cat_title}</pattern>
        <implicit-parameter name="p_p_lifecycle">1</implicit-parameter>
        <implicit-parameter name="javax.portlet.action">getCategoryList</implicit-parameter>
    </route>
     <route>
        <pattern>/list/{delta}/{cur}</pattern>
        <implicit-parameter name="p_p_lifecycle">1</implicit-parameter>
        <implicit-parameter name="javax.portlet.action">getReferenceList</implicit-parameter>
        <implicit-parameter name="keywords"></implicit-parameter>
        <implicit-parameter name="advancedSearch">false</implicit-parameter>
        <implicit-parameter name="resetCur">false</implicit-parameter>        
        <implicit-parameter name="andOperator">true</implicit-parameter>
    </route>
    <route>
        <pattern>/{article_id}/{title}</pattern>
        <implicit-parameter name="p_p_lifecycle">1</implicit-parameter>
        <implicit-parameter name="javax.portlet.action">getViewDetail</implicit-parameter>
    </route>
    
    <route>
        <pattern>/</pattern>
        <implicit-parameter name="p_p_lifecycle">0</implicit-parameter>
    </route>
</routes>

La friendly url incriminata è quella che inizia con list e si occupa di presentare il risultato paginato.
Sembra che ci sia comunque qualche problema in fase di render degli elementi del paginatore.

L'url della pagina di arrivo è corretta
http://localhost:8080/web/web/references/-/ref/list/2/1

Mentre l'url del bottone "Successivo" è
http://localhost:8080/web/web/references/-/ref/list/2/1?_referencepage_WAR_productsportlet_cur=2

Se si prova a modificare l'url della pagina per simulare l'accesso alla pagina successiva
http://localhost:8080/web/web/references/-/ref/list/2/2
il risultato è corretto.

Andando in debug sembra che la jsp portal-web/docroot/html/taglib/ui/page_iterator/start.jsp utilizzata per realizzare i bottoni accodi i parametri all'url originale in formato friendly della pagina corrente

<li class="<%= (cur != pages) ? " " : "disabled" %>"&gt;
				<a href="<%= (cur != pages) ? _getHREF(formName, namespace + curParam, cur + 1, jsCall, url, urlAnchor) : " javascript:;" %>" target="&lt;%= target %&gt;"&gt;
					<c:choose>
						<c:when test="<%= type.equals(&quot;approximate&quot;) || type.equals(&quot;more&quot;) %>">
							<liferay-ui:message key="more" />
						</c:when>
						<c:otherwise>
							<liferay-ui:message key="next" />
						</c:otherwise>
					</c:choose>
				</a>
			</li>


Qualcuno è riuscito a far funzionare un paginatore con friendly url?
Fabio De Pra, módosítva 9 év-val korábban

RE: Friendly url e paginazione risultati

New Member Bejegyzések: 24 Csatlakozás dátuma: 2013.11.04. Legújabb bejegyzések
Ciao,
dopo un po' di debug secondo me il problema è nelle jsp che generano i controlli per la navigazione dei risultati.

Ad esempio la jsp liferay-portal-src-6.2-ce-ga2\portal-web\docroot\html\taglib\ui\page_iterator\start.jsp che genera il bottone per tornare alla prima pagina di risultati.


		
    <c:if test="<%= type.equals(&quot;approximate&quot;) || type.equals(&quot;more&quot;) || type.equals(&quot;regular&quot;) %>"> <li class="<%= (cur != 1) ? " " : "disabled" %> first"&gt; <a href="<%= (cur != 1) ? _getHREF(formName, namespace + curParam, 1, jsCall, url, urlAnchor) : " javascript:;" %>" target="&lt;%= target %&gt;"&gt; ← <liferay-ui:message key="first" /> </a> </li> </c:if>


Il link viene generato direttamente con un a e con il valore dell'attributo href valorizzato con il codice javascript generato dal metodo _getHREF.


private String _getHREF(String formName, String curParam, int cur, String jsCall, String url, String urlAnchor) throws Exception {
	String href = null;

	if (Validator.isNotNull(url)) {
		href = HtmlUtil.escape(url + curParam + "=" + cur + urlAnchor);
	}
	else {
		href = "javascript:document." + formName + "." + curParam + ".value = '" + cur + "'; " + jsCall;
	}

	return href;
}


che non fa considerazioni sulle friendly url.
Questa secondo me è la spiegazione del perchè i link dei paginatori non vengono convertiti in friendly url.

Per risolvere la cosa ho usato un trucco un po' "sporco" andando a correggere i link dei bottoni di navigazione via javascript in modo da renderli friendly.