天天看點

wicket

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檔案。

繼續閱讀