Hey Kevin, I was thinking in the same way today, about having my own HTMLComponentFactory and WebController classes. In fact, by extending the WebController class I can change any of the actions, say I want to change the Welcome page, then overriding the init() method of WebController I can do the needful. And extending the HTMLComponentFactory class I can add my own components. I actually made a few changes and it worked out. So it seems we are on the same page. Please let me know once you commit such changes. I am going on a long holiday after today. Once I get back, I will catch up.
Thanks, Sudipto. On Fri, May 18, 2012 at 12:44 PM, Kevin Meyer - KMZ <[email protected]> wrote: > Hi Sudipto, > > Sorry - I dropped this one - I meant to reply to you earlier. > > But you have already done what I had to do, albeit slightly differently. I > wrote my own logon servlet and controller servlet by extending > LogonServlet and ControllerServlet, respectively, and specifying them > in the web.xml file (, editting "<servlet-name>Logon</servlet-name>" > and "<servlet-name>Controller</servlet-name>", respectively). > > I also had to make minor mods to, I think, the getters: > > @Override > protected WebController getWebController(PathBuilder pathBuilder) > { > return new SaipWebController(pathBuilder); > } > > // ////////////////////////////////////////////////////////////////// > // doGet, doPost > // ////////////////////////////////////////////////////////////////// > > @Override > protected HtmlComponentFactory getHtmlComponentFactory() { > return new SaipHtmlComponentFactory(getPathBuilder()); > } > > > I have not committed those changes, it seems. > > > In the "SaipHtmlComponentFactory", I could provide any of my own > components, as required: > > @Override > public LogonFormPage createLogonPage(final String user, final String > password, boolean registerLink, String error) { > return new SaipLogonFormPage(pathBuilder, styleSheet, header, > footer, user, password, registerLink, error); > } > > @Override > public Component createInlineBlock(String style, String text, String > description) { > return new SaipSpan(style, text, description, false); > } > > public Component createSaipBlock(String style, String text, String > description) { > return new SaipSpan(style, text, description, true); > } > > public Component createFile(String style, String description, String > fileName) { > return new SaipFileHtml(style, description, fileName); > } > > > Where Saip* are my custom classes. > > > Regards, > Kevin > > > On 17 May 2012 at 16:02, Sudipto Majumder wrote: > > > Hi Dan, > > > > Since I got some time I was looking at ways to customize the HTML viewer > > UI. Say, I want to change the login page. Here is what I did. > > > > I changed the access modifier of the method *renderPrompt() *of the > class * > > org.apache.isis.viewer.html.servlet.LogonServlet* from *private* to * > > protected*, extended that servlet and introduced my own servlet > overriding > > the *renderPrompt()* method and made change in the *web.xml* accordingly > to > > point to my servlet for the url pattern */logon.htmlviewer*. > > > > I also made my own login form by extending the class * > > org.apache.isis.viewer.html.component.html.LogonFormPage* and overriding > > the *writeContent()* method and used this class inside the > > *renderPrompt() *method > > mentioned earlier. > > > > Further I needed some *public* getter methods for the attributes *user, > > password, registerLink, error* in class > > *org.apache.isis.viewer.html.component.html.LogonFormPage > > *and *pathBuilder, styleSheet, siteHeader, siteFooter* in class * > > org.apache.isis.viewer.html.component.html.AbstractHtmlPage*. > > > > The logic I have not changed anything but only the html part inside > > the *writeContent() > > *method and my purpose was solved. > > > > The point I am trying to make is that if you provide some public getter > > methods in many of your framework classes encapsulating the private > > attributes and make some of the methods less restrictive (at least > > protected would do), then it will be much easier to extend your framework > > code and make UI customizations. Please let me know your thought on the > > same. > > > > Thanks, > > Sudipto. > > > > > > On Thu, May 10, 2012 at 5:49 PM, Dan Haywood > > <[email protected]>wrote: > > > > > Hi Sudipto > > > that's great to hear. > > > > > > Of course, as I'm sure you're aware, the JQM is incomplete - there is > still > > > no support for invoking actions, for example. Feel free to pick it up > and > > > add that functionality if you wish. > > > > > > By the way, the JQM will break once I get back to the JSON viewer and > > > update it to the latest version of the Restful Objects spec [1]. Just > so > > > you are aware... However, the JQM code is currently quite small, so > > > updating it shouldn't be too difficult. > > > > > > Cheers > > > Dan > > > > > > [1] http://restfulobjects.org > > > > >
