掲示板

Friendly url e paginazione risultati

10年前 に Fabio De Pra によって更新されました。

Friendly url e paginazione risultati

New Member 投稿: 24 参加年月日: 13/11/04 最新の投稿
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
10年前 に Daniele Baggio によって更新されました。

RE: Friendly url e paginazione risultati

Expert 投稿: 336 参加年月日: 08/12/05 最新の投稿
Facci avere il friendly-url-mapper.xml che usi e cerchiamo di capire.
10年前 に Fabio De Pra によって更新されました。

RE: Friendly url e paginazione risultati

New Member 投稿: 24 参加年月日: 13/11/04 最新の投稿
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.
10年前 に Fabio De Pra によって更新されました。

RE: Friendly url e paginazione risultati

New Member 投稿: 24 参加年月日: 13/11/04 最新の投稿
Ciao a tutti, non vedo i messaggi degli altri utenti.
Come mai?
thumbnail
10年前 に Pier Paolo Ramon によって更新されました。

RE: Friendly url e paginazione risultati

Junior Member 投稿: 90 参加年月日: 10/05/25 最新の投稿
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?
10年前 に Fabio De Pra によって更新されました。

RE: Friendly url e paginazione risultati

New Member 投稿: 24 参加年月日: 13/11/04 最新の投稿
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!
10年前 に Fabio De Pra によって更新されました。

RE: Friendly url e paginazione risultati

New Member 投稿: 24 参加年月日: 13/11/04 最新の投稿
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?
9年前 に Fabio De Pra によって更新されました。

RE: Friendly url e paginazione risultati

New Member 投稿: 24 参加年月日: 13/11/04 最新の投稿
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.