2010-05-17 49 views
2

我想用Wicket來構建一個應用程序,但我有一些想要編寫/維護JavaScript的設計人員,他們基本上期望每個頁面有1個JS段和一個全局JS文件。 我認爲在wicket中添加javascript的最自然的方式是將其添加到每個組件(而不是每個頁面),這會給那些設計者帶來問題(分段的javascript,並且不得不將它寫在java文件中)。有沒有更好的方法來解決這個問題? (當然,我希望事情能夠在部分刷新後工作。)Wicket和一個豐富的Ajax網站:最簡單的方法來做到這一點?

而他們想要的第二件(相關的)事情(我真的很想)是通過JSON格式請求信息的可能性一個靜態鏈接,這可能在Wicket?

回答

1

構建於AJAX支持的Wicket始終是有狀態的,因此可通過更改URL進行訪問。如果設計師不打算使用Wicket的JS庫,這是相當簡單的安裝一個JSON頁:

public class JsonReturningPage extends WebPage { 
    public JsonReturningPage(PageParameters params) { 
    String json = "{foo: 4711}"; 
    IRequestTarget t = new StringRequestTarget("application/json", "UTF-8", json); 
    getRequestCycle().setRequestTarget(t); 
    } 
} 

或者,你也可以實現自己的AbstractRequestTargetUrlCodingStrategy直接從IRequestTarget decode(RequestParameters params)返回IRequestTarget和安裝它你應用。

關於JS文件,我會試着教育他們每個組件使用一個文件。這當然具有更少的複製粘貼代碼和更簡單的維護的優點。另外,我肯定會阻止Java代碼中的JS。通常只需要將數據或配置傳遞給JS,無論是作爲變量定義還是方法調用。由於這些數據通常都是用Java編寫的,JS是由設計人員編寫的,現在是設計師和程序員合作的時候了。

+0

是的,那個json-thingy就是我一直在尋找的東西(另外聽起來不錯,但很難),並且我對JS文件的想法的一些確認也非常好,謝謝。 – Johan 2010-05-17 08:34:02

+0

@sfussenegger如何訪問該頁面?我無法找到網址!如果該頁面沒有HTML,那麼該頁面的網址是什麼?它爲我返回404 :(我嘗試了所有可能的網址,我可以想到。例如:localhost:7001/MyApp/JsonReturningPage – GabrielBB 2015-10-16 15:05:39

1

對第二個問題的快速回答是可以的。使用bookmarkable links訪問返回JSON數據的資源。

+0

嗯,我知道可收藏的鏈接。但是我不知道如何在這樣的URL上返回JSON,我應該有一個可收藏的鏈接頁面,對不對? – Johan 2010-05-17 07:21:18

3

我從JSON開始,讓我的檢票頁返回JSON,但很快意識到有更好的工具可用,特別是如果您有完整的Web服務層。如果你只是需要一個小小的JSON,那麼總是通過一個GET,然後確定,做一個Wicket頁面。

我最終使用JerseyJackson旁邊的Wicket。 Jersey簡化了URL的配置,可以使用不同的http方法(GET/POST/PUT/DELETE)執行不同的操作,並且可以輕鬆解析查詢字符串等。我會考慮爲更重的JSON需求使用此路由。

您可以輕鬆地在相同的Web應用程序中使用少量web.xml配置運行Wicket和Jersey。

1

您可以輕鬆地使用下面的代碼與檢票動態通信:

AbstractDefaultAjaxBehavior callme = new AbstractDefaultAjaxBehavior(){ 
     @Override 
     protected void respond(AjaxRequestTarget target) { 
     } 
}; 
page.add(callme); 


//From any ajaxrequesttarget you can simply append the following code: 
target.appendJavascript("wicketAjaxGet('"+callme.getCallbackUrl()+");"); 

這樣你就可以有一個ajaxlink等...將在ajaxrequest傳送到檢票側。如果你想傳遞的數據(雖然靜態鏈接聽起來不像是)執行以下操作:

"wicketAjaxGet('"+callme.getCallbackUrl()+"&x='+value_to_pass_back''"; 
//to Read the value in the respond: 
String x = RequestCycle.get().getRequest().getParameter("x"); 

所以URL回調是動態生成(如回調URL是特定的會話),但它形成像任何其他網址....

對我來說,這是比在檢票口頂部建立JSON系統,而不是使用內置的JSON系統更簡單10倍....我一直使用這個和至少它對我來說很好。如果你的解決方案不同/更好,我想知道爲什麼也許。

相關問題