锁定老帖子 主题:请问关于webwork的tag使用
精华帖 (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。 |
|
返回顶楼 | |
发表时间: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有以“!”,就截掉再去取 |
|
返回顶楼 | |
发表时间: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都已经做的很好了 |
|
返回顶楼 | |
发表时间: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。 试了一下:<ww:submit action="employ" method="save"/> 直接用submit的action和method属性就可以了。 生成的html里会变成:name="action:employ!save" 效果一样。 ![]() |
|
返回顶楼 | |
发表时间:2006-08-02
dwangel 写道 试了一下:<ww:submit action="employ" method="save"/>
直接用submit的action和method属性就可以了。 生成的html里会变成:name="action:employ!save" 效果一样。 ![]() Very Well! 其实<ww:submit action="employ" method="save" />与我说的<ww:submit name="action:employ!save"/>是等价的,而: <ww:submit action="employ" />与<ww:submit name="action:employ"/>,<ww:submit method="save" />与<ww:submit name="method:save"/>是等价的,而要是重定向该怎么处理 <ww:submit name="redirect-action:xxxAction"/>只能有这一种写法吗? |
|
返回顶楼 | |
发表时间:2006-08-02
要重定向也是应该action执行完了再重定向吧。
不用直接jsp submit就重定向啊。 那就直接在xwork.xml里的result里配一个结果定向。 |
|
返回顶楼 | |
发表时间: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,以后得多向你请教了。 |
|
返回顶楼 | |
发表时间: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); |
|
返回顶楼 | |
发表时间: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呢,感觉有点奇怪。 |
|
返回顶楼 | |
发表时间: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}&y=${y}</result> x,y需要有getter方法。 |
|
返回顶楼 | |