Looks like I misunderstood what themes are doing in CAS. As I understand it now, the "/WEB-INF/view/jsp/default" directory has nothing to do with the "default" theme. When you create a new theme, all you have to do is create a new <theme_name>.properties file inside the /WEB-INF/classes directory. Then you put name/value pairs in there like "foo=bar". Then you modify the template at /WEB-INF/view/jsp/mobile/ui/casLoginView.jsp (for example) and put <spring:theme code="foo"/> in, and this will be replaced with the word "bar" in the HTML output (you must also create a "default.properties" file at the same time also with a "foo" defined in it, or you get an error when someone tries to request a page with the default theme).

Now, I have two very different styles of web pages depending on the usage, but most of the changes are separated out into a header file and a footer file that are currently included via a jsp:directive.include statement. So if I could do something like <jsp:directive.include file=<spring:theme code="template_top" /> /> I would be back in business, but it does not look like you can embed the theme substitutions in other jsp directives. It also does not look like I can embed the jsp directive in the .properties files.

I could embed the entire text of the header and footer into the .properties files, but that's going to be a long and messy bunch of html, css and javascript.

Does anyone know of a way to do an if/then statement around the value of a <spring:theme> variable? The differences between the themed pages I would like to deploy are a lot more complicated than changing a single CSS include.

Thanks,
Aaron

On 04/10/2012 03:51 PM, Aaron Chantrill wrote:
I'm using CAS 3.3.1 and trying to use two different themes depending on which website is being passed in as "service". If the user is coming from our test server, the pages should be rendered using the "default" theme, but if they come from our "m" server, they should get a sign-in page that is optimized for viewing on a smartphone.

So far, I have

copied the WEB-INF/view/jsp/default directory to WEB-INF/view/jsp/mobile.

made some changes to the WEB-INF/view/jsp/mobile/ui/casLoginView.jsp so I can tell which theme I am using.

copied the WEB-INF/classes/default_views.properties file to WEB-INF/classes/mobile.properties and WEB-INF/classes/mobile_views.properties (the instructions at https://wiki.jasig.org/display/CASUM/Theme+Control say to "Add another set of theme properties file, which must be placed to the root of /WEB-INF/classes folder, name it as theme_name.properties" but there was no "default.properties" file in that location, only a "default_views.properties" file, so I created both.

changed the links in these two files to point to the "mobile" directory instead of the "default" directory.

    updated cas-servlet.xml file to add "servicesManager-ref"
<bean id="themeResolver" class="org.jasig.cas.services.web.ServiceThemeResolver"
        p:defaultThemeName="${cas.themeResolver.defaultThemeName}"
        p:servicesManager-ref="servicesManager"
        p:argumentExtractors-ref="argumentExtractors" />

changed the theme for my "m" server to "mobile" in deployerConfigContext.xml: <bean id="serviceRegistryDao" class="org.jasig.cas.services.InMemoryServiceRegistryDaoImpl">
<property name="registeredServices">
<list>
<bean class="org.jasig.cas.services.RegisteredServiceImpl">
<property name="id" value="0" />
<property name="name" value="m.wvsom.edu" />
<property name="description" value="Allows access via m.wvsom.edu and uses a non-standard mobile-friendly theme" />
<property name="serviceId" value="http://m.wvsom.edu/**"; />
<property name="evaluationOrder" value="10000001" />
<property name="theme" value="mobile" />
<property name="allowedAttributes">
<list>
<value>UDC_IDENTIFIER</value>
</list>
</property>
</bean>

<bean class="org.jasig.cas.services.RegisteredServiceImpl">
<property name="id" value="1" />
<property name="name" value="WVSOM test" />
<property name="description" value="Allows WVSOM Test Server" />
<property name="serviceId" value="http://test.wvsom.edu/**"; />
<property name="evaluationOrder" value="10000002" />
<property name="allowedAttributes">
<list>
<value>UDC_IDENTIFIER</value>
</list>
</property>
</bean>
Restarted Tomcat, and the default theme continues to come up.

If I edit WEB-INF/cas.properties and change
cas.themeResolver.defaultThemeName=default
cas.viewResolver.basename=default_views

to
cas.themeResolver.defaultThemeName=mobile
cas.viewResolver.basename=mobile_views

then the new mobile theme comes up for everything.

So it seems like the theme is working, but it's either not reading the theme information from the serviceRegistry, or not getting the basename from it. Something's not linking up. I also have all the logs set to DEBUG and the only time the word "mobile" appears in the logs is when I set mobile to be the default theme and it rendered correctly. So it does not seem like CAS is even aware that I am trying to get it to display an alternate theme.

Any help greatly appreciated,

Aaron




--
You are currently subscribed to [email protected] as: 
[email protected]
To unsubscribe, change settings or access archives, see 
http://www.ja-sig.org/wiki/display/JSG/cas-user

Reply via email to