如何使ATG小滴用作默认的oparam

2019年2月26日 19点热度 0条评论

在ATG中,如果不满足其他任何条件,则Switch小滴将转到默认的oparam。

我有一个想要表现类似的液滴。您可以在页面上调用它,并将代码放在oparam条件内。如果您没有从液滴返回的oparam的包装,则应使用默认包装。

droplet.java

public void service(DynamoHttpServletRequest request, DynamoHttpServletResponse response) 
    throws ServletException, IOException
{
    String b = (String) request.getParameter("a");
    if(b != null && b.equals("c")){
        request.serviceLocalParameter("d", request, response);
    }else{
        request.serviceLocalParameter("e", request, response);
    }
}



droplet.jsp

<dsp:droplet name="Droplet">
    <dsp:oparam name="d">
        <!-- d param was set -->
    </dsp:oparam>
    <dsp:oparam name="default">
        <!-- e, or some other param was set -->
    </dsp:oparam>
</dsp:droplet>

我是ATG的新手,所以我可能会以错误的方式进行操作...

解决方案如下:

如果您尝试服务不存在的本地参数,则serviceLocalParameter将返回false。因此,您要做的就是检查serviceLocalParameter()返回的值,如果该值为false,则可以服务任意数量的不同局部参数。在下面的示例中,我为任意参数“ default”提供服务(注意:默认值为ARBITRARY,可以将其称为任何东西。如果我有一个oparam“ foo”,一个oparam“ bar”和一个oparam“ beh”,则可以尝试并服务foo,如果失败,我可以尝试服务吧,如果失败,我可以尝试服务beh ...)

因此,在您的示例中,以下操作将满足您的要求:

droplet.java

public void service(DynamoHttpServletRequest request, DynamoHttpServletResponse response) 
    throws ServletException, IOException
{
    boolean handled = false;
    String b = (String) request.getParameter("a");

    if(b != null && b.equals("c")){
        handled = request.serviceLocalParameter("d", request, response);
    }else{
        handled = request.serviceLocalParameter("e", request, response);
    }

    /*
     * Did not find a valid parameter, try servicing the
     * parameter named "default" instead
     */
    if (!handled) {
        request.serviceLocalParameter("default", request, response);
    }
}

出于说明目的,此版本的简化版本(仅包含与默认服务相关的代码):

boolean handled = false; 

handled = request.serviceLocalParameter("nondefault", request, response);

if (!handled) {
    handled = request.serviceLocalParameter("default", request, response);
}