Struts中直接访问一个Action,JSF如何做?

05-11-24 wuliang88
看了几天,但都是从UIView开始,由用户点击command产生action,或者激活actionListener,没看到怎样通过url激活bean的某个方法的……

我觉的不可能要求用户总是从Input开始,
比如,用struts做viewThread.do?id=1,查看id为1的帖子
这样的连接,可以发给朋友直接点开的,用jsf应该怎么做?难道要朋友在queryThreadForm.jsf页面输入1,点提交,然后navigate到viewThread.jsp 才能看??

极度困惑中……

banq
2005-11-25 10:16
使用commandLink 直接激活actionListener,推出的页面要在
naviagte找到那个Jsp就可以。

wuliang88
2005-11-25 10:19
没人回答吗?觉的是很常见的问题啊~~

自己考虑了一些,希望高手跟进

阐述请求的生命周期
http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JSFIntro10.htmlwp122161
其中有将请求来源分类,Faces request,跟Non-Faces request,对后者,他只提到如何设置web。xml,通过后缀名俘获请求(.faces),开始生命周期,没提怎么直接转行为方法

与struts的对比
http://www.jdon.com/idea/jsf-struts.htm
通过对比来理解jsf,有struts概念的,看这篇文理解jsf会容易些。
看完感觉更加没希望了,既然jsf更像swing开发,要通过source,产生event激活动作,应该是脱离不了客户端界面了。
想象下如果swing要将按钮提供的功能给外部程序用,只能用另外的通讯机制,rmi或socket监听,调用业务方法。swing component本身并不适合做外部接口(当然可以类似桌面开发,用api查找windowID获取控件发送click消息,模拟用户点击……只能说不合适)

题外话:如果要代码重用,jsf的action也应该只是business delegate controller,真正的代码都放在业务方法里。
用这个图描述:http://www-128.ibm.com/developerworks/cn/java/j-jsf1/figure2.gif

最后,说下我想到的解决办法
1、模拟用户点击的方法。你可以将客户端input页面保存为html,将form的method改成get,获取实际的url,毕竟jsf所谓的事件驱动还是通过form submit达成,我试过,这会多些jsf产生的hidden字段,看上去很不爽
(h:form 不支持 method属性----我觉的这已经暗示了不建议通过输入url调用方法的事实)
2、用servlet展现这类接口,或者跟struts混用~逼急了只好这样:~[

wuliang88
2005-11-25 10:26
bang终于出现~~

但commandLink本身也要放在页面里啊?
我就是不想用户打开页面->点击->查看结果,需要去掉“打开页面”,进行交互这步!

因为我们网站要做个查询接口,给其他厂商调用,他们肯定是用程序自动打开页面的
比如,统计交易的查询
用struts:
/queryTrans.do?merchantId=1&from=2005-1-1&to=2005-2-1
得到xml
<trans>
<tran id="xxx" date="xxx" ... />
...
</trans>

用jsf怎么做?

wuliang88
2005-11-25 10:29
补xml~~

(trans)
(tran id="xxx" date="xxx" ... /)
 ...
(/trans)
<p class="indent">

wuliang88
2005-12-09 10:38
没人知道吗?这样准备用回struts了,不然项目进度没法保证阿
本来想学下新东西的,所谓struts的换代产品……