SkinFactoryImpl is failing to recognize skins from trinidad-skins.xml with use 
of backingBean AgentUtil.


WARNING: Can't find a skin that matches family  bigfont  and renderkit 
org.apache.myfaces.trinidad.desktop, so we will use the simple skin

We can see from the WARNING that the bigfont family is indeed coming back from 
the Header request, however, we can not identify the bigfont skin in 
trinidad-skins.xml

----------------------------
trinidad-skins.xml
----------------------------

<?xml version="1.0" encoding="UTF-8"?>

<skins xmlns="http://myfaces.apache.org/trinidad/skin";>

        <skin>
                <id>bigfont.desktop</id>
                <family>bigfont</family>
                <render-kit-id>
                        org.apache.myfaces.trinidad.desktop
                </render-kit-id>
                <style-sheet-name>css/skins/bigfont.css</style-sheet-name>
        </skin>

        <skin>
                <id>androidFamily.pda</id>
                <family>androidFamily</family>
                <version>V2</version>
                <render-kit-id>org.apache.myfaces.trinidad.pda</render-kit-id>
                <style-sheet-name>css/skins/android.css</style-sheet-name>
        </skin>

        <skin>
                <id>Chrome.desktop</id>
                <family>Chrome</family>
                <render-kit-id>
                        org.apache.myfaces.trinidad.desktop
        </render-kit-id>
                <style-sheet-name>
                        css/skins/bigfont.css
        </style-sheet-name>
        </skin>
</skins>

-----------------------
trinidad-config.xml
------------------------
<?xml version="1.0" encoding="UTF-8"?>
<trinidad-config xmlns="http://myfaces.apche.org/trinidad/config";>

  <skin-family> #{agentUtil.phoneFamily} </skin-family>
  
</trinidad-config>

-------------------------
AgentUtil.java
-------------------------

package vin.objects;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;

@ManagedBean
@SessionScoped
public class AgentUtil {

        private String phoneFamily;
        private String ANDROID_SKIN = "androidFamily";
        private String DEFAULT_SKIN = "bigfont";
        private String CHROME_SKIN = "Chrome";

        public AgentUtil() {
        }

        public String getPhoneFamily() {
                FacesContext fc = FacesContext.getCurrentInstance();

                HttpServletRequest req = (HttpServletRequest) 
fc.getExternalContext()
                                .getRequest();

                String agent = req.getHeader("User-Agent");
                if (agent != null && agent.indexOf("Android") > -1) {
                        System.out.println("Agent is not null! It's Android!");
                        System.out.println(agent.toString());
                        return ANDROID_SKIN;
                } else {
                        if (agent != null && agent.indexOf("Chrome") > -1) {
                                System.out.println("Agent is not null! It's 
Chrome!");
                                System.out.println(agent.toString());
                                return CHROME_SKIN;
                        } else {
                                System.out.println("Agent is null!");
                                System.out.println(agent.toString());
                                return DEFAULT_SKIN;
                        }
                }

        }

        public void setPhoneFamily(String phoneFamily) {
                this.phoneFamily = phoneFamily;
        }

}

Thanks,
Rico D'Amore

Reply via email to