David, I've never tried it but I think you should use ActionResponse.sendRedirect() to redirect the client browser to your custom service. For that, you need to inject the ActionResponse (tapestry.portlet.ActionResponse) into your page as the generic WebResponse doesn't expose this method.
The other issue is that your custom service should not use the standard link factory. In portlet mode the standard link factory can only generate render and action portlet links. You should inject the servlet link factory (tapestry.url.LinkFactory) instead. Hope this helps, Raphael Jean EntropySoft > -----Original Message----- > From: Dávid Ignjič [mailto:[EMAIL PROTECTED] > Sent: vendredi 19 mai 2006 13:38 > To: Tapestry users > Subject: Portlet and custom service (generate url to service in > ActionRequest)? > > I thinks that problem is that i create link in service in actionRequest > and property 'renderResponse' isn't set. I need generate redirect to my > custom service in this action request. > > how can do this ? > > Thanks for response. > > Dávid Ignjič wrote: > > I have problem with custom service under portlet, when i submit form > > and execute listener and i want create Ilink to service i get this > error: > > > > Failure invoking listener method 'public > > org.apache.tapestry.engine.ILink > > > com.skms.InternetPreVsetkych.tapestry.reporty.CelkovyPrehlad.formSubmit(or > g.apache.tapestry.IRequestCycle)' > > on [EMAIL PROTECTED]: Property > > 'renderResponse' of <OuterProxy for > > > tapestry.portlet.PortletRequestGlobals(org.apache.tapestry.portlet.Portlet > RequestGlobals)> > > is null. > > > > java.lang.NullPointerException > > Property 'renderResponse' of <OuterProxy for > > > tapestry.portlet.PortletRequestGlobals(org.apache.tapestry.portlet.Portlet > RequestGlobals)> > > is null. > > > > * > > > $RenderResponse_10b4968ae3d._targetServiceProperty($RenderResponse_10b4968 > ae3d.java) > > > > * > > > $RenderResponse_10b4968ae3d.createActionURL($RenderResponse_10b4968ae3d.ja > va) > > > > * > > > $RenderResponse_10b4968ae3b.createActionURL($RenderResponse_10b4968ae3b.ja > va) > > > > * > > > org.apache.tapestry.portlet.PortletLinkFactoryImpl.constructLink(PortletLi > nkFactoryImpl.java:49) > > > > * > > $LinkFactory_10b4968acfa.constructLink($LinkFactory_10b4968acfa.java) > > * > > > com.skms.InternetPreVsetkych.tapestry.reporty.GenerovanieReportov.getLink( > GenerovanieReportov.java:65) > > > > * > > $IEngineService_10b4968ad8f.getLink($IEngineService_10b4968ad8f.java) > > * > > > org.apache.tapestry.services.impl.EngineServiceInnerProxy.getLink(EngineSe > rviceInnerProxy.java:72) > > > > * > > > org.apache.tapestry.services.impl.EngineServiceOuterProxy.getLink(EngineSe > rviceOuterProxy.java:61) > > > > * > > > com.skms.InternetPreVsetkych.tapestry.reporty.CelkovyPrehlad.formSubmit(Ce > lkovyPrehlad.java:102) > > > > > > > > Any suggestion what is wrong (in tapestry or in my config)? > > > > Thanks > > David > > > > > > > > Service: > > > > public class GenerovanieReportov implements IEngineService { > > /** > > * Logger for this class > > */ > > private static final Logger logger = Logger > > .getLogger(GenerovanieReportov.class); > > > > public static final String SERVICE_NAME = "generovanieReportov"; > > /** @since 4.0 */ > > private RequestExceptionReporter _exceptionReporter; > > > > /** @since 4.0 */ > > private LinkFactory _linkFactory; > > > > /** @since 4.0 */ > > private WebResponse _response; > > private WebContext context; > > private WebRequest request; > > public void setRequest(WebRequest request) { > > this.request = request; > > } > > > > public ILink getLink(boolean post, Object parameter) { > > Map parameters = new HashMap(); > > > > parameters.put(ServiceConstants.SERVICE, getName()); > > if (parameter != null) > > parameters.putAll((Map)parameter); > > > > return _linkFactory.constructLink(this, false, parameters, > > true); > > } > > > > protected final > > com.skms.InternetPreVsetkych.service.UcastnikService > getUcastnikService() > > { > > try > > { > > PrincipalStore.set(getRequest().getUserPrincipal()); > > SecurityStore.setMDPTRole(new Boolean > > (getRequest().isUserInRole("mdpt"))); > > SecurityStore.setProvider(null); > > if (!getRequest().isUserInRole("mdpt")){ > > try { > > GroupManager grManager = (GroupManager) > > > getContext().getAttribute(CommonPortletServices.CPS_GROUP_MANAGER_COMPONEN > T); > > > > Collection col = > > grManager.getGroupsForUser(getRequest().getUserPrincipal().getName()); > > for (Iterator iter = col.iterator(); > > iter.hasNext();) { > > Group element = (Group) iter.next(); > > Provider provider = > > getUcastnikService().findProvider(element.getPrincipal().getName()); > > if (provider != null){ > > SecurityStore.setProvider(provider); > > } > > } > > } catch (Exception e) { > > logger.error("getUcastnikService() - e=" + e, > > e); //$NON-NLS-1$ > > } > > } > > return > > > com.skms.InternetPreVsetkych.ServiceLocator.instance().getUcastnikService( > ); > > > > } > > catch (final Throwable throwable) > > { > > throw new RuntimeException(throwable); > > } > > } public void service(IRequestCycle cycle) throws > > IOException { > > > > try > > { > > OutputStream output = _response.getOutputStream(new > > ContentType("application/pdf")); > > String report = cycle.getParameter("report"); > > ReportCreate rc = new ReportCreate(); > > SimpleDateFormat df = new SimpleDateFormat("dd.MM.yyyy"); > > if ("ziadostNovoPripojenych".equals( report)){ > > Date dateOd = df.parse(cycle.getParameter("dateOd")); > > Date dateDo = df.parse(cycle.getParameter("dateDo")); > > rc.createZiadostNovoPripojenych(dateOd, dateDo, output); > > } > > if ("celkovyPrehlad".equals( report)){ > > Date dateOd = df.parse(cycle.getParameter("dateDue")); > > if (cycle.getParameter("provider") != null){ > > Provider prov = Provider.Factory.newInstance(); > > prov.setId(new Long(cycle.getParameter("provider"))); > > SecurityStore.setProvider(prov); > > } > > rc.createCelkovyPrehlad(dateOd, output); > > } > > if ("celkovyPrehladProvider".equals( report)){ > > Date dateOd = df.parse(cycle.getParameter("dateDue")); > > rc.createCelkovyPrehladProvider(dateOd, > > output); > > } > > > > } > > catch (ClassCastException ex) > > { > > _exceptionReporter.reportRequestException("Report generate > > error ", ex); > > > > return; > > } > > catch (Throwable ex) > > { > > _exceptionReporter.reportRequestException("Error creating > > pdf stream.", ex); > > > > return; > > } > > > > return; > > } > > > > public String getName() > > { > > return SERVICE_NAME; > > } > > > > /** @since 4.0 */ > > public void setExceptionReporter(RequestExceptionReporter > > exceptionReporter) > > { > > _exceptionReporter = exceptionReporter; > > } > > > > /** @since 4.0 */ > > public void setLinkFactory(LinkFactory linkFactory) > > { > > _linkFactory = linkFactory; > > } > > > > /** @since 4.0 */ > > public void setResponse(WebResponse response) > > { > > _response = response; > > } > > > > public void setContext(WebContext context) { > > this.context = context; > > } > > > > public WebContext getContext() { > > return context; > > } > > > > public WebRequest getRequest() { > > return request; > > } > > } > > > > hivemodule.xml: > > <module id="com.skms.InternetPreVsetkych.tapestry.reporty" > > version="4.0.0" package="org.apache.tapestry.portlet"> > > > > Add on for Tapestry that adds native Portlet support. > > > > <dependency module-id="tapestry" version="4.0.0"/> > > <dependency module-id="tapestry.portlet" version="4.0.0"/> > > <dependency module-id="hivemind.lib" version="1.1.0"/> > > <contribution > > configuration-id="tapestry.portlet.resolver.PageResolverRules"> > > <match portlet-mode="view" page="reporty"/> </contribution> > > > > <contribution configuration-id="tapestry.state.ApplicationObjects"> > > <state-object name="validation-delegate" scope="session"> > > <create-instance > > class="org.apache.tapestry.valid.ValidationDelegate"/> > > </state-object> </contribution> > > > > <contribution configuration-id="tapestry.services.ApplicationServices"> > > <service name="generovanieReportov" > > object="service:GenerovanieReportov"/> > > </contribution> > > > > <service-point id="GenerovanieReportov" > > interface="org.apache.tapestry.engine.IEngineService"> > > <invoke-factory> > > <construct > > > class="com.skms.InternetPreVsetkych.tapestry.reporty.GenerovanieReportov"> > > > > <set-object property="exceptionReporter" > > value="infrastructure:requestExceptionReporter"/> > > <set-object property="response" value="infrastructure:response"/> > > <set-object property="linkFactory" > > value="infrastructure:linkFactory"/> > > <set-object property="request" value="infrastructure:request"/> > > <set-object property="context" value="infrastructure:context"/> > > </construct> > > </invoke-factory> > > </service-point> > > > > </module> > > > > > > page: > > > > <page-specification > > class="com.skms.InternetPreVsetkych.tapestry.reporty.CelkovyPrehlad"> > > > > <description>add a description</description> > > <inject property="request" object="infrastructure:request"/> > > <inject property="context" object="infrastructure:context"/> > > <inject property="portletRequest" > > object="service:tapestry.portlet.PortletRequest"/> > > <inject property="generovanieService" > > object="engine-service:generovanieReportov"/> > > > > <property name="datum" persist="session"/> > > <property name="provider" persist="session"/> </page-specification> > > > > > > <form jwcid="[EMAIL PROTECTED]" success="listener:formSubmit" > > clientValidationEnabled="ognl:true"> > > <table> > > <tr> > > <td class="portlet-section-alternate"><label > > jwcid="@FieldLabel" > > field="component:datumPripojenia">Dátum</label></td> > > <td class="portlet-form-field-label"> > > <span displayName="Dátum" > > jwcid="[EMAIL PROTECTED]" value="ognl:datum" > > validators="validators:required[Zadajte prosĂm dátum]" > > translator="translator:date,pattern=dd.MM.yyyy"/> > > </td> > > </tr> > > <tr> > > <td class="portlet-section-alternate">Provider: </td> > > <td class="portlet-form-field-label"> > > <select > > jwcid="[EMAIL PROTECTED]" value="ognl:provider" > > model="ognl:providerModel" > > size="1" > > displayName="Provider"> > > </select> > > </td> > > </tr> > > <tr> > > <td class="portlet-section-alternate"></td> > > <td class="portlet-form-field-label"> > > <input type="submit" value="Generuj" > > class="portlet-form-button" /> > > <a href="#" jwcid="@PageLink" > > page="reporty">Návrat</a> </td> > > </tr> </table> > > </form> > > > > > > > > Class: > > > > package com.skms.InternetPreVsetkych.tapestry.reporty; > > > > import org.apache.log4j.Logger; > > > > import java.text.SimpleDateFormat; > > import java.util.ArrayList; > > import java.util.Collection; > > import java.util.Date; > > import java.util.HashMap; > > import java.util.Iterator; > > > > import org.apache.commons.collections.CollectionUtils; > > import org.apache.commons.collections.Transformer; > > import org.apache.jetspeed.CommonPortletServices; > > import org.apache.jetspeed.security.Group; > > import org.apache.jetspeed.security.GroupManager; > > import org.apache.tapestry.IRequestCycle; > > import org.apache.tapestry.engine.IEngineService; > > import org.apache.tapestry.engine.ILink; > > import org.apache.tapestry.html.BasePage; > > import org.apache.tapestry.web.WebContext; > > import org.apache.tapestry.web.WebRequest; > > import org.postgresql.jdbc2.optional.SimpleDataSource; > > > > import com.skms.InternetPreVsetkych.PrincipalStore; > > import com.skms.InternetPreVsetkych.SecurityStore; > > import com.skms.InternetPreVsetkych.domain.Provider; > > import com.skms.InternetPreVsetkych.tapestry.Item; > > import com.skms.InternetPreVsetkych.tapestry.ItemSelectionModel; > > > > > > public abstract class CelkovyPrehlad extends BasePage { > > /** > > * Logger for this class > > */ > > private static final Logger logger = > > Logger.getLogger(CelkovyPrehlad.class); > > > > public abstract WebRequest getRequest(); > > public abstract WebContext getContext(); > > public abstract Date getDatum(); > > public abstract Provider getProvider(); > > > > ItemSelectionModel providerModel; > > public ItemSelectionModel getProviderModel() { > > if (providerModel == null){ > > ArrayList list = new ArrayList(); > > list.add(new Item("", null)); > > try{ > > > > CollectionUtils.collect(getUcastnikService().getProviders().iterator(), > > new Transformer() { > > public Object transform(Object obj) { > > Provider prov = (Provider) obj; > > return new Item(prov.getNazov(), prov.getId()); > > } > > }, list); > > } catch (Exception e){ > > } > > providerModel = new > > ItemSelectionModel(list); } > > return providerModel; > > } > > protected final > > com.skms.InternetPreVsetkych.service.UcastnikService > getUcastnikService() > > { > > try > > { > > PrincipalStore.set(getRequest().getUserPrincipal()); > > SecurityStore.setMDPTRole(new Boolean > > (getRequest().isUserInRole("mdpt"))); > > SecurityStore.setProvider(null); > > if (!getRequest().isUserInRole("mdpt")){ > > try { > > GroupManager grManager = (GroupManager) > > > getContext().getAttribute(CommonPortletServices.CPS_GROUP_MANAGER_COMPONEN > T); > > > > Collection col = > > grManager.getGroupsForUser(getRequest().getUserPrincipal().getName()); > > for (Iterator iter = col.iterator(); > > iter.hasNext();) { > > Group element = (Group) iter.next(); > > Provider provider = > > getUcastnikService().findProvider(element.getPrincipal().getName()); > > if (provider != null){ > > SecurityStore.setProvider(provider); > > } > > } > > } catch (Exception e) { > > logger.error("getUcastnikService() - e=" + e, > > e); //$NON-NLS-1$ > > } > > } > > return > > > com.skms.InternetPreVsetkych.ServiceLocator.instance().getUcastnikService( > ); > > > > } > > catch (final Throwable throwable) > > { > > throw new RuntimeException(throwable); > > } > > } public abstract IEngineService getGenerovanieService(); > > public ILink formSubmit(IRequestCycle cycle){ > > HashMap map = new HashMap(); > > SimpleDateFormat df = new SimpleDateFormat("dd.MM.yyyy"); > > map.put("dateDue", df.format(getDatum())); > > if (getProvider() != null){ > > map.put("provider", getProvider().getId()); > > } return getGenerovanieService().getLink(false, > > map); > > } > > } > > > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
