現在天下大亂啊,到外都是要用ajax,
為了加入這一大軍中,自然我也是去學習了一下ajax,
對了煩又亂,又不好調度的javascript我自然沒有太多好感了,
可是又不可能不學啊。
現在也是要找工作 的時候了。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
學啊學啊,
上google 實驗室看了看,看到了google web toolkit,
這下可把我樂壞了。
憑著我的這點英語水平,還好看看文檔是夠的。(之前我也講過我鄱譯過幾萬字的英文nutch 文檔,)
。。。。。。。。。。。。。。。。。。。。。。。。
下了GWT ,開始看develop guide
。。。。。。。。。。。
主要是兩個方面,client 和RPC ,
client 是用在brouwer上的viewr,和java裡的awt相差無幾,如果你對awt熟的話,就直接用就可以了。
另一個是RPC,
兩個介面,一個實現完成 一個module作為一個server.
在名字的命名上如下 public interface MyService extends RemoteService ...{
public String myMethod(String s);
}interface MyServiceAsync ...{
public void myMethod(String s, AsyncCallback callback);
}public class MyServiceImpl extends RemoteServiceServlet implements
MyService ...{
public String myMethod(String s) ...{
// Do something interesting with 's' here on the server.
return s;
}
}
如果就是用gwt 和hibernate 來做一個小東西的話,這樣你就可以用了。
以下是rpc 的uml 圖,懂的話看一下就知道 了。
為何要這個非同步介面呢?
因為 ajax 的原理所然,這是一個brouwer和sever的一個中介層,這樣brouwer就不用重新整理了。
一個大問題是gwtt 和struts 的itegration,雖然有幾個文章講了一下,但是深度的結合使用還不是很清楚,今天先寫到這裡吧。
以下這個回複是在google gwt 論壇上看到 的,比較實用。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////> Because I don't find it obvious how to pass
> GWT-variables to Struts Forms.
I guess that is what I am getting at... you wouldn't pass anything to
Struts. Once you deliver that first HTML page with GWT code in it, the page
would never refresh. The HTML page would never change.
...Instead the page would pass the form data as a Java bean, which would
then be validated/stored on the server, and the server would return a Java
value. The return value might be a boolean to indicate success, or an error
object to indicate failure, or some other Java object that holds return
data.
Or to summarize, once the first page is served, the only data passed between
the server and the client are Java objects.
But again, it all depends on what you need to do. A friend of mine is
looking into using GWT for an application solution, who is also a big fan of
Struts. His specific problem was that he wanted a tabbed panel, and each
pane would be a different web page, and I assume that means a Struts
action. I provided a solution that looks like this...
// create a tabbed panel, and add it to the page
TabPanel tp = new TabPanel();
RootPanel.get().add(tp);
// create two frames, pointing to Struts actions
Frame frame1 = new Frame("/frame1Action.do");
Frame frame2 = new Frame("/frame2Action.do");
// add the frames to the panel
tp.add(frame1);
tp.add(frame2);
He had a follow-up question asking how he would pass variables to the Struts
actions. My response was to pass them in the URL.
frame1.setUrl("/frame1Action.do?foo=1&bar=2");
In his application the contents of the Frames are Struts actions, and are
not GWT enabled. What is GWT enabled is the container that holds the
frames.
Another situation might be that you want to provide the user with a
calculator (or calendar, color picker, etc) tool to help them fill in a form
field. Here is an example:
http://gwt-widget.sourceforge.net/demo/calc/index.html.
In the example the result of the calculation is placed in text box, which
could then be submitted to a Struts action in the normal way. This is an
example of enhancing the page with no need for server-side integration.
So the answer is, it depends. It depends on the specific problem.
There is no requirement that the whole page use GWT widgets. So you could
use a single calulator tool widget or a a few Frame widgets, yet leave the
reast of the application the way you normally would.
I don't know if I am answering the question or just babeling at this point,
but I do have a recommendation for server-side integration with Struts.
1. Don't tie your business logic to the Struts action.
2. Create business logic components that can be used by both Struts actions
and GWT servlets.
3. Use the appropriate tool, either Struts action or GWT servlet depending
on what you are doing.
Here is an example. Lets say that you have a form for gathering sign-up
information. The initial form page would probably be a plain HTML page
served to the user. This page would have GWT code in it to allow for
client-side validation of the entries.
(form entry) The user enters their name into the first field, and moves to
the second field. The client-side GWT code immediately sends the value of
the first field to the server for validation. The idea being that we want
to make the sign-up process painless, and point our entry errors as soon as
possible.
(client-side validation) The server call is done through a GWT servlet,
which then passes the value to some business module, and returns the result
to the browser. While the user is filling out the form we only ever call
GWT servlets.
(form submission) Once the user is entering data they submit the form to the
server for processing. In this example this submission it to an ordinary
Struts action, and the data is submitted in the normal way, using an HTML
form.
(server-side validation) The Struts action still needs to validate the entry
because it isn't a great idea to rely on only client-side validation. In
this case the Struts action calls the same business module that the GWT
servlet used.
In this example there is integration between Struts and GWT, but only where
it makes sense to do so to solve the given problem.
I don't know if that helps, but maybe you can see what I am getting at. If
you have a specific problem that needs a solution I would be interested in
hearing what it is.
Rob
On 7/22/06, Joachim <Tristan.Ro...@gmail.com> wrote:
- Hide quoted text -- Show quoted text -
Thanks for your explanations.
My specific problem was about "form submission", and submitting GWT
generated values to the server using a simple POST to an action, and
not RPC, but I found the answer in your FormPanel :
/**
* Adds a widget to the underlying panel and sets the "name"
* attribute. This will allow the value of the form field to
* be passed to the server when the form is submitted.
*
* @param field the widget to add to the form
* @param name the form field name
* @return false if widget can not be added
*/
public boolean addField (Widget field, String name)
{
<b> DOM.setAttribute(field.getElement(), "name", name); </b>
return add(field);
}
Robert Hanson a écrit :