论坛首页 Java企业应用论坛

请问关于webwork的tag使用

浏览 10232 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-08-01  
javafan80130 写道
不过,现在有个新问题:

webwork的action提供了一个alias的方法,比如xxAction!aliasMethod.action。但是如果用<ww:form action="xxAction!aliasMethod" />就会出错,不知如果需要<ww:form>,又需要别名的情况,该在,如何配置?

要想实现这样的功能,就得需要ActionMapper的强大功能了:
<ww:form method="post" action="xxAction">
     <ww:submit name="method: aliasMethod" />
</ww:form>

请注意这里的方法前缀:name="method: aliasMethod",表示执行xxAction中的aliasMethod()方法或者doAliasMethod()方法,与什么别名没有关系;还有name="action: someAction",表示执行xwork.xml文件中配置的另一个someAction;name="redirect: http://www.baidu.com",表示重定向到百度首页,此提交不会起作用;name="redirect-action: xxxAction",表示重定向到xxxAction。
0 请登录后投票
   发表时间:2006-08-01  
aaronjiu_00 写道
javafan80130 写道
不过,现在有个新问题:

webwork的action提供了一个alias的方法,比如xxAction!aliasMethod.action。但是如果用<ww:form action="xxAction!aliasMethod" />就会出错,不知如果需要<ww:form>,又需要别名的情况,该在,如何配置?

要想实现这样的功能,就得需要ActionMapper的强大功能了:
<ww:form method="post" action="xxAction">
     <ww:submit name="method: aliasMethod" />
</ww:form>

请注意这里的方法前缀:name="method: aliasMethod",表示执行xxAction中的aliasMethod()方法或者doAliasMethod()方法,与什么别名没有关系;还有name="action: someAction",表示执行xwork.xml文件中配置的另一个someAction;name="redirect: http://www.baidu.com",表示重定向到百度首页,此提交不会起作用;name="redirect-action: xxxAction",表示重定向到xxxAction。


呵呵,aaronjiu_00真的很精通webwork,谢谢!这样的话,对于客户端校验有什么影响吗?

我看了xwork的代码,想改掉里面一个方法,加上xxAction!aliasMethod别名判断,不知可行?改下面这个方法

private class RuntimeConfigurationImpl implements RuntimeConfiguration
{
    .....
    public synchronized ActionConfig getActionConfig(String namespace, String name)
}

webwork是根据命名空间和name去取的,这里判断一下,如果action有以“!”,就截掉再去取
0 请登录后投票
   发表时间:2006-08-01  
javafan80130 写道
aaronjiu_00 写道
javafan80130 写道
不过,现在有个新问题:

webwork的action提供了一个alias的方法,比如xxAction!aliasMethod.action。但是如果用<ww:form action="xxAction!aliasMethod" />就会出错,不知如果需要<ww:form>,又需要别名的情况,该在,如何配置?

要想实现这样的功能,就得需要ActionMapper的强大功能了:
<ww:form method="post" action="xxAction">
     <ww:submit name="method: aliasMethod" />
</ww:form>

请注意这里的方法前缀:name="method: aliasMethod",表示执行xxAction中的aliasMethod()方法或者doAliasMethod()方法,与什么别名没有关系;还有name="action: someAction",表示执行xwork.xml文件中配置的另一个someAction;name="redirect: http://www.baidu.com",表示重定向到百度首页,此提交不会起作用;name="redirect-action: xxxAction",表示重定向到xxxAction。


呵呵,aaronjiu_00真的很精通webwork,谢谢!这样的话,对于客户端校验有什么影响吗?

我看了xwork的代码,想改掉里面一个方法,加上xxAction!aliasMethod别名判断,不知可行?改下面这个方法

private class RuntimeConfigurationImpl implements RuntimeConfiguration
{
    .....
    public synchronized ActionConfig getActionConfig(String namespace, String name)
}

webwork是根据命名空间和name去取的,这里判断一下,如果action有以“!”,就截掉再去取

谢谢这位仁兄的夸奖!
我的这种解决方案,你可以去尝试运行一下,看看实际的运行效果。不过应该提醒你的是:如果action不是在默认的命名空间的时候(namespace="" or namespace="/"),<ww:form/>的namespace属性一定要写,而且action属性不要以.action结尾。这是一个例子
<ww.form method="post" action="register" namepace="/member" validate="true">
....
</ww.form>

我不知道你非得要改xwork的代码干吗?这与xwork有什么关系?详见:com.opensymphony.webwork.dispatcher.mapper.DefaultActionMapper,什么都知道了!这些ww22都已经做的很好了
0 请登录后投票
   发表时间:2006-08-02  
aaronjiu_00 写道

请注意这里的方法前缀:name="method: aliasMethod",表示执行xxAction中的aliasMethod()方法或者doAliasMethod()方法,与什么别名没有关系;还有name="action: someAction",表示执行xwork.xml文件中配置的另一个someAction;name="redirect: http://www.baidu.com",表示重定向到百度首页,此提交不会起作用;name="redirect-action: xxxAction",表示重定向到xxxAction。

试了一下:&lt;ww:submit action="employ" method="save"/&gt;
直接用submit的action和method属性就可以了。
生成的html里会变成:name="action:employ!save"
效果一样。
0 请登录后投票
   发表时间:2006-08-02  
dwangel 写道
试了一下:&lt;ww:submit action="employ" method="save"/&gt;
直接用submit的action和method属性就可以了。
生成的html里会变成:name="action:employ!save"
效果一样。

Very Well!
其实&lt;ww:submit action="employ" method="save" /&gt;与我说的&lt;ww:submit name="action:employ!save"/&gt;是等价的,而:
&lt;ww:submit action="employ" /&gt;与&lt;ww:submit name="action:employ"/&gt;,&lt;ww:submit method="save" /&gt;与&lt;ww:submit name="method:save"/&gt;是等价的,而要是重定向该怎么处理
&lt;ww:submit name="redirect-action:xxxAction"/&gt;只能有这一种写法吗?
0 请登录后投票
   发表时间:2006-08-02  
要重定向也是应该action执行完了再重定向吧。
不用直接jsp submit就重定向啊。
那就直接在xwork.xml里的result里配一个结果定向。
0 请登录后投票
   发表时间:2006-08-02  
aaronjiu_00 写道
javafan80130 写道
aaronjiu_00 写道
javafan80130 写道
不过,现在有个新问题:

webwork的action提供了一个alias的方法,比如xxAction!aliasMethod.action。但是如果用<ww:form action="xxAction!aliasMethod" />就会出错,不知如果需要<ww:form>,又需要别名的情况,该在,如何配置?

要想实现这样的功能,就得需要ActionMapper的强大功能了:
<ww:form method="post" action="xxAction">
     <ww:submit name="method: aliasMethod" />
</ww:form>

请注意这里的方法前缀:name="method: aliasMethod",表示执行xxAction中的aliasMethod()方法或者doAliasMethod()方法,与什么别名没有关系;还有name="action: someAction",表示执行xwork.xml文件中配置的另一个someAction;name="redirect: http://www.baidu.com",表示重定向到百度首页,此提交不会起作用;name="redirect-action: xxxAction",表示重定向到xxxAction。


呵呵,aaronjiu_00真的很精通webwork,谢谢!这样的话,对于客户端校验有什么影响吗?

我看了xwork的代码,想改掉里面一个方法,加上xxAction!aliasMethod别名判断,不知可行?改下面这个方法

private class RuntimeConfigurationImpl implements RuntimeConfiguration
{
    .....
    public synchronized ActionConfig getActionConfig(String namespace, String name)
}

webwork是根据命名空间和name去取的,这里判断一下,如果action有以“!”,就截掉再去取

谢谢这位仁兄的夸奖!
我的这种解决方案,你可以去尝试运行一下,看看实际的运行效果。不过应该提醒你的是:如果action不是在默认的命名空间的时候(namespace="" or namespace="/"),<ww:form/>的namespace属性一定要写,而且action属性不要以.action结尾。这是一个例子
<ww.form method="post" action="register" namepace="/member" validate="true">
....
</ww.form>

我不知道你非得要改xwork的代码干吗?这与xwork有什么关系?详见:com.opensymphony.webwork.dispatcher.mapper.DefaultActionMapper,什么都知道了!这些ww22都已经做的很好了


仔细看了一下DefaultActionMapper,真的是功能强大啊!有空得多研究一下webwork的代码了,webwork的官方文档写得没那么详细。谢谢aaronjiu_00,以后得多向你请教了。
0 请登录后投票
   发表时间:2006-08-02  
dwangel 写道
要重定向也是应该action执行完了再重定向吧。
不用直接jsp submit就重定向啊。
那就直接在xwork.xml里的result里配一个结果定向。


下面是重定向的这段下面代码,应该不会执行action,而是直接sendRedirect到配置的url去了。

   String location = key.substring(REDIRECT_ACTION_PREFIX.length());
                    ServletRedirectResult redirect = new ServletRedirectResult();
                    String extension = getDefaultExtension();
                    if (extension != null) {
                        location += "." + extension;
                    }
                    redirect.setLocation(location);
                    mapping.setResult(redirect);
0 请登录后投票
   发表时间:2006-08-02  
javafan80130 写道
dwangel 写道
要重定向也是应该action执行完了再重定向吧。
不用直接jsp submit就重定向啊。
那就直接在xwork.xml里的result里配一个结果定向。


下面是重定向的这段下面代码,应该不会执行action,而是直接sendRedirect到配置的url去了。

   String location = key.substring(REDIRECT_ACTION_PREFIX.length());
                    ServletRedirectResult redirect = new ServletRedirectResult();
                    String extension = getDefaultExtension();
                    if (extension != null) {
                        location += "." + extension;
                    }
                    redirect.setLocation(location);
                    mapping.setResult(redirect);


我的意思是说从逻辑上说,因为redirect-action后,request里的信息就不存在了,所以,与其还要submit还不如,直接一个link呢,感觉有点奇怪。
0 请登录后投票
   发表时间:2006-08-02  
javafan80130 写道
dwangel 写道
要重定向也是应该action执行完了再重定向吧。
不用直接jsp submit就重定向啊。
那就直接在xwork.xml里的result里配一个结果定向。


下面是重定向的这段下面代码,应该不会执行action,而是直接sendRedirect到配置的url去了。

   String location = key.substring(REDIRECT_ACTION_PREFIX.length());
                    ServletRedirectResult redirect = new ServletRedirectResult();
                    String extension = getDefaultExtension();
                    if (extension != null) {
                        location += "." + extension;
                    }
                    redirect.setLocation(location);
                    mapping.setResult(redirect);

To dwangel:
其实,我说的这种<ww:submit name="redirect-action:list"/>是很有用的,譬如你在编辑edit页面,页面上都是按钮:保存,重置等,(你未必需要非得保存,Action执行之后才到列表页面(Redirect after post)吧),如果你想直接链接到列表页面,这种按钮就起作用了,要不你得这样写,
在ftl中,<@ww.submit value="查看列表" onclick="window.location='${base}/list.action'"/>,不专业,页面还凌乱;
或者你得写一个链接,,<a href="${base}/list.action">查看列表</a>,而这样又与其他的按钮界面风格上不统一了!
To javafan80130:看来你代码看的还挺细,
REDIRECT_ACTION_PREFIX,为了就是不执行Action,直接地重定向。有时这种方法是有需求的,如上所述。

如过还想实现“redirect-after-post”这样的功能,推荐使用
“Redirect Result”或者“Redirect Action Result”,代码实例如下:
<result name="success" type="redirect">
  <param name="location">foo.jsp</param>
  <param name="parse">false</param>
</result>

<package name="public" extends="webwork-default">
    <action name="login" class="...">
        <!-- Redirect to another namespace -->
        <result type="redirect-action">
            <param name="actionName">dashboard</param>
            <param name="namespace">/secure</param>
        </result>
    </action>
</package>

<package name="secure" extends="webwork-default" namespace="/secure">
    <-- Redirect to an action in the same namespace -->
    <action name="dashboard" class="...">
        <result>dashboard.jsp</result>
        <result name="error" type="redirect-action>error</result>
    </action>

    <action name="error" class="...">
        <result>error.jsp</result>
    </action>
</package>


如果担心重定向后信息丢失,可以考虑使用Action Chain拦截器(但不提倡),或者在redirect-action结果定义中,添加参数
<result type="redirect-action">xxxAction!someMethod?x=${x}&amp;y=${y}</result>
x,y需要有getter方法。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics