在portlet的前端页面,所有链接都被变形了,所以如果想用ajax的方式拼出一个链接,以转向到portlet中的其它页面,则直接的方式是不可行的。
原来写的ajax操作后台动作,以保持前端可视的作法,会出现问题。
看了很多解法,最后还是一个老外的代码让我找到了思路。
原来写成 xxxx.do?xxx=xxx&xxx=xxx的写法,在portlet+struts中要写成<a href="<s:url action="xxxx.do?xxx=xxx&xxx=xxx" portletUrlType="action" portletMode="view"/>xxxx</a>
也就是说,在页面出来之前,由struts生成链接,再由portal进行变形,这样的话,后面的xxx=xxx&xxx=xxx就不能在页面生成以后,再由script来拼成了。
解决的方式是:不要有“get”方式来做,由ajax以POST方式访问xxxx.do再将参数传入。大致如下:
var ajax=new Ajax.Request("xxxx.do",
method:"post",
parameter:{
"xxx":"xxx",
"xxx":"xxx},
onComplete:fuction(r){xxxxxxxx}
);
?
也就是说,以post方式传参数时,参数不会与url混合而变形,这也是portlet与ajax结合的好办法了。