1.wicket中的html頁面控制類需要和頁面檔案的路徑和名稱相關聯,也就是說它們是按照wicket中定好的規則進比對的,而且每個控制html頁面控制類必須繼承wicket.markup.html.WebPage類,如com.david.chen.sample中的HelloPage.java是用于控制com.david.chen.sample中的HelloPage.html的;wicket中的每個元件的ID不能相同,就是ID号隻能對應頁面模闆中的一個相應的控件,而不能對應兩個或更多。
2.Model是用來給控件提供資料和顯示内容的,使用者可以自定義model的實作,必須繼承wicket.model.IModel接口,Model并不代表真正的資料類型,它隻提供模型層的對外接口,外部對象要通過getObject來取得真正的資料,然後進行相應的處理。
Application對象用于在系統管理相關的配置,是系統的關鍵。Application對象控制類檔案的名稱不存在預設的規則限制,隻需要在web.xml中配置好就可以了。
3.wicket的事件驅動模式,由存在于B/S用戶端的控件輸入送出的URL并指明Listener的類型,由伺服器根據
4.Listener的類型調用相應的方法。IRequestListerner是Listener的基接口。
5. wicket提供了一個ISessionStore并為其提供了一個預設實作HttpSessionStore,用于将控件的相關資訊及Model儲存在HttpSession中,做有效的狀态管理。使用者請求結果的Page會被放到一個PageMap對象中由ISessionStore儲存,wicket提供PageMap的一個管理政策接口wicket.session.pagemap.IPageMapEvictionStrategy,可以通過這個接口來設定PageMap的存放數量,用WebApplication的getSessionSetting來取得和設定這個政策的實作,預設情況下PageMap可以存放5個Page對象.
6.wicket的html輸出會對"<>"進行自動轉義,如果需要輸出"<>"符合,需要調用setEscapeModelStrings(false);Label對象可以輸出字元串或任意對象,如果是對象是則調用對象的toString()方法輸出資訊。
7.MutiLineLable可以對"\n"進行自動轉換,轉換為
。wicket的include控件隻能包含靜态頁面。
8.wicket的表單驗證應該說和Struts大同小異,還不支援用戶端驗證,是以要使用Ajax進行驗證或Wicket-Stuff。
9.wicket中的checkBoxMutipleChoice,RadioChoice等控件不能直接輸出名稱隻能顯示值,采用IChoiceRender接口可以解決這個問題。
10.wicket中的DatePicker存在于wicket-extensions包中,是以Web程式的lib中要包含該包。
11.wicket中的Ajax應用,先通過普通的wicket應用在用戶端輸出HTML(HTML元素需要帶有wicket:id屬性),軟化由浏覽器端向遠端伺服器發出Ajax請求,然後在伺服器将相應的wicket控件輸出為HTML,當浏覽器端的Js程式收到相應的Html後,就根據wicket:id覆寫原有的HTML元素。
12.wicket提供了一個IAuthorizationStrategy接口用來處理權限問題。wicket為IAuthorization提供了一個預設的ALLOW_ALL實作,它預設支援是以的操作。使用者如果要進行權限控制,隻需要實作這個接口,然後通過Application的ISecuritySetting來注入,這樣wicket在每個控件輸出時,調用isActionAuthorized反複檢查Renderer和Enabled是否允許執行。
13.wicket中的css樣式檔案應該放置在根目錄。
14.在session中存儲對象,需要繼承wicket的session接口。
public class MySession extends WebSession {
public MySession(WebApplication application) {
super(application);
}
private String myAttribute;
// ... getters and setters
//把需要加到session的對象加入到這裡并提供getter,setter
}
在Application類中重寫以下兩個方法
protected ISessionFactory getSessionFactory() {
return this.sessionFactory;
}
public Session newSession() {
return new MySession(WebApplication.this);
}
15.将wicket中的頁面統一放置和管理的處理辦法
首先定義一個IResourceStreamLocator的類:
public class WebPageResourceStreamLocator extends AbstractResourceStreamLocator {
private IResourceFinder finder;
public WebPageResourceStreamLocator(IResourceFinder finder) {
this.finder = finder;
}
protected IResourceStream locate(final Class clazz, final String path) {
final URL file = finder.find(trimFolders(path));
if (file != null) {
return new UrlResourceStream(file);
}
return null;
}
private String trimFolders(String path) {
return path.substring(path.lastIndexOf("/") + 1);
}
}
然後, 重寫Application.init()方法并加入新的IResourceStreamLocator:
public class CizelgemApplication extends AuthDataApplication {
@Override
protected void init() {
super.init();
CompoundResourceStreamLocator locator =
(CompoundResourceStreamLocator)getResourceSettings().getResourceStreamLocator();
WebApplicationPath resourceFinder = (WebApplicationPath) getResourceSettings
().getResourceFinder();
resourceFinder.add("src/main/webapp"); //this path should be changed
locator.add(0, new WebPageResourceStreamLocator(resourceFinder));
}
16.button的setDefaultFormProcessing(false)方法可以在表單送出的時候隻調用button的onSubmit方法,
當true的情況将先調用form的onSubmit方法再調用button的onSubmit方法,預設為true。
17.FeedbackMessage進行篩選和排列顯示的順序,可以通過設定FeedbackPanel的sortingComparator屬性或者,提供一個重寫了FeedbackPanel.getFeedbackMessageModel()的FeedbackMessagesModel實作。
String contextPath = getApplication().getApplicationSettings().getContextPath();
getRequestCycle().setRequestTarget(new RedirectRequestTarget(contextPath +
"/path/to/legacyJspFile.jsp"));
可以定位到不屬于wicket應用上的頁面和資源。
18.wicket properties檔案,包括Application的properties檔案和單頁面的properties檔案,在
Application.properties中配置的資訊是全局的配置資訊,單頁面的properties資訊隻對該頁面有效,如
果該頁面沒有配置單頁面properties資訊則再轉到Application.properties中查找,當單頁面的
properties存在多個時,根據系統的語言選擇相應的properties檔案。