You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by Dávid Ignjič <ig...@skms.sk> on 2006/05/19 13:38:05 UTC

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(org.apache.tapestry.IRequestCycle)' 
> on $CelkovyPrehlad_18@1675d70[CelkovyPrehlad]: Property 
> 'renderResponse' of <OuterProxy for 
> tapestry.portlet.PortletRequestGlobals(org.apache.tapestry.portlet.PortletRequestGlobals)> 
> is null.
>
> java.lang.NullPointerException
> Property 'renderResponse' of <OuterProxy for 
> tapestry.portlet.PortletRequestGlobals(org.apache.tapestry.portlet.PortletRequestGlobals)> 
> is null.
>
>    * 
> $RenderResponse_10b4968ae3d._targetServiceProperty($RenderResponse_10b4968ae3d.java) 
>
>    * 
> $RenderResponse_10b4968ae3d.createActionURL($RenderResponse_10b4968ae3d.java) 
>
>    * 
> $RenderResponse_10b4968ae3b.createActionURL($RenderResponse_10b4968ae3b.java) 
>
>    * 
> org.apache.tapestry.portlet.PortletLinkFactoryImpl.constructLink(PortletLinkFactoryImpl.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(EngineServiceInnerProxy.java:72) 
>
>    * 
> org.apache.tapestry.services.impl.EngineServiceOuterProxy.getLink(EngineServiceOuterProxy.java:61) 
>
>    * 
> com.skms.InternetPreVsetkych.tapestry.reporty.CelkovyPrehlad.formSubmit(CelkovyPrehlad.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_COMPONENT); 
>
>                        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="formFilter@Form" 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="datumPripojenia@DatePicker" 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="provider@PropertySelection" 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_COMPONENT); 
>
>                        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: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
>
>



---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org