Hi Tadashi,
Thank you for your post . It's very helpful . But I have two 2 questions (I 
have more , but 2 is enough).
1. What simulators do you use ? I put you this question because I find very 
hard to use the ones from the blackberry . I read some times ago about an add 
on for mozilla for changing user-agent . Do you know more about this?
2. How I do tracing of my JSF applications ? I interested more about the 2 jars 
trinidad-api.jar and trinidad-impl.jar . I love to read logs . There I can see 
many JSF internals.
I am interested more in charting . This is area where I want to insist .
Of course I want everything you can share with me - documentation,articles,code 
samples
Thanks again.
Best Regards,
Aurel

--- Original Message ---
> Hi Aurel,
> 
> Trinidad groups BlackBerry devices to two major groups.
> BlackBerry 4.5.x 
> or lower (e.g. Curve and Pearl) or BlackBerry 4.6 (Bold) or
> higher 
> (Storm is 4.7).
> BlackBerry 4.5.x or lower does not support XMLHttpRequest
> (needed to run 
> Ajax) and some capabilities are more restrictive than BlackBerry
> 4.6 or 
> higher. The most significant restriction is the performance.
> Once 
> JavaScript is used on these devices, the page load will take
> much longer 
> and usability suffers from it. Not to mention the transfer
> time to 
> download Trinidad's large JavaScript file. (Though it is cached
> and it 
> is not a problem on subsequent page load, the initial page
> load will 
> give negative user experience.) It was our decision not to use
> 
> JavaScript fir BlackBerry 4.5.x or lower. (see 
> http://myfaces.apache.org/trinidad/devguide/mobile.html#Basic_XHTML_Browser_Support,
> 
> and 
> http://myfaces.apache.org/trinidad/devguide/mobile.html#BlackBerry_4.5_Lower)
> On the other hand, Blackberry 4.6 and higher has better
> performance. It 
> supports XMLHttpRequest. Its JavaScript and DOM support are
> good. So we 
> decided to enable JavaScript and Ajax partial page rendering.
> It is 
> basically as functional as iPhone or even desktop browsers.
> 
> There are some Trinidad renderer logic that is specific to
> BlackBerty in 
> order to supplement lack of JavaScript and CSS implementation
> in the 
> BlackBerry browsers, but they are transparent to the application.
> 
> I have created some sample demo apps to test Trinidad mobile
> support. I 
> did not need to do anything special, except for designing the
> UI to fit 
> in a small screen - that is always the case for mobile UI
> development. 
> There are some techniques/snippets that can be used for mobile
> web page 
> development I can share with you if you are interested.
> 
> Use of skinning for different device types is useful in mobile
> 
> development. See 
> http://myfaces.apache.org/trinidad/devguide/mobile.html#Skinning
> for 
> more info.
> 
> General info is at http://myfaces.apache.org/trinidad/devguide/mobile.html.
> 
> I have developed some sample demo apps. There are some techniques
> that 
> may be useful in mobile application development. Below is an
> example of 
> it. If you are interested, I can share more, but let me know
> if you have 
> specific problem/areas you want to work on.
> 
> Thanks,
> Tadashi
> 
> Note that the table contains 1 column. In the column several
> fields are 
> rendered. This is one of the technique effective on small
> screen.
> 
> <?xml version='1.0' encoding='windows-1252'?>
> <jsp:root xmlns:jsp="http://java.sun.com/JSP/Page"; version="2.1"
>           xmlns:f="http://java.sun.com/jsf/core";
>           xmlns:h="http://java.sun.com/jsf/html";
>           xmlns:trh="http://myfaces.apache.org/trinidad/html";
>           xmlns:tr="http://myfaces.apache.org/trinidad";>
>   <jsp:output omit-xml-declaration="true" doctype-root-element="HTML"
>               doctype-system="http://www.w3.org/TR/html4/loose.dtd";
>               doctype-public="-//W3C//DTD HTML 4.01
> Transitional//EN"/>
>   <jsp:directive.page contentType="text/html;charset=windows-1252"/>
>   <f:view>
>     <trh:html>
>       <trh:head title="mybank Online">
>         <meta http-equiv="Content-Type"
>               content="text/html; charset=windows-1252"/>
>         <f:verbatim rendered="#{AgentUtil.phoneFamily ==
> 'BB4_6Family' ? 
> 'true' : 'false'}">
>             <meta name="viewport" content="width=device-width;
> 
> initial-scale=1.0; maximum-scale=1.0; user-scalable=0;"/>
>         </f:verbatim>
>         <f:verbatim rendered="#{AgentUtil.phoneFamily ==
> 'iphoneFamily' 
> ? 'true' : 'false'}">
>             <meta name="viewport" content="width=320;
> initial-scale=1.0; 
> maximum-scale=1.0; user-scalable=0;"/>
>         </f:verbatim>
>       </trh:head>
>       <trh:body>
>         <!--tr:messages/-->
>         <h:form>
>           <tr:image source="/images/mybankbandnarrow.gif"/>
>           <tr:panelHeader styleClass="toolbar" text="Accounts">
>             <tr:commandLink text="Sign Off" styleClass="button"
>                             action="signoff"></tr:commandLink>
>           </tr:panelHeader>
>           <div id="certlist" class="panelBase">
>             <tr:commandButton styleClass="button1" text="Transfer.."
>                               action="transfer"/>
>             <tr:spacer rendered="#{AgentUtil.needSpacer}"
>                        height="5" width="15"/>
>             <tr:commandButton styleClass="button1" text="Billpay.."
>                               action="billpay"/>
>             
>             <tr:table value="#{bindings.AccountView1.collectionModel}"
>                       styleClass="multirowTable" 
> horizontalGridVisible="false"
>                       var="row" rows="5"
>                       emptyText="#{bindings.AccountView1.viewable
> ? 'No 
> data to display.' : 'Access Denied.'}"
>                       width="100%">
>               <tr:column>
>                 <tr:panelGroupLayout 
> layout="#{AgentUtil.phoneFamilyDebug=='minimalFamily' ?
> 'horizontal' : 
> 'vertical'}"
>                                      styleClass="listing">
>                   <tr:image styleClass="listingImage"
>                             
> source="#{row.bindings.TypeIconUrl.inputValue} != '' ? 
> #{row.bindings.TypeIconUrl.inputValue} : "/>
>                   <tr:commandLink text="#{row.bindings.Name.inputValue}"
>                                   action="detail"
> styleClass="listingLink">
>                     <tr:setActionListener 
> from="#{row.bindings.AccountId.inputValue}"
>                                           to="#{sessionScope.accountId}"/>
>                   </tr:commandLink>
>                   <tr:spacer rendered="#{AgentUtil.needSpacer}"
>                              height="5" width="5"/>
>                   <tr:outputText value="#{row.bindings.Balance.inputValue}"
>                                  styleClass="listingDetails">
>                     <f:converter converterId="Bank10.amountConverter"/>
>                   </tr:outputText>
>                 </tr:panelGroupLayout>
>               </tr:column>
>             </tr:table>
>             <tr:separator/>
>             
>             <tr:commandButton styleClass="button1" text="Find
> ATM"
>                               action="ATM"/>
>             
>             <tr:spacer rendered="#{AgentUtil.needSpacer}"
>                        height="5" width="15"/>
>             <tr:commandButton styleClass="button1" text="Find
> Branch"
>                               action="branches"/>
>           </div>
>           <tr:image source="/images/mybankbandnarrow.gif"/>
>         </h:form>
>       </trh:body>
>     </trh:html>
>   </f:view>
> </jsp:root>
> 
> AgentUtil.java
> import javax.faces.context.FacesContext;
> import javax.servlet.http.HttpServletRequest;
> 
> public class AgentUtil {
>     private String phoneFamily;
>     private String BLACKBERRY4_2_SKIN  = "BB4_2Family";
>     private String BLACKBERRY4_6_SKIN  = "BB4_6Family";
>     /* We will use common skin for both 4_6 and 4_7
>      */
>     private String BLACKBERRY4_7_SKIN  = "BB4_6Family";
>     private String IPHONE_SKIN         = "iphoneFamily";
>     private String WINDOWS_FAMILY      = "windowsFamily";
>     private String SYMBIAN_SKIN        = "symbianFamily";
>     private String FIREFOX_SKIN        = "firefoxFamily";
>     private String DEFAULT_SKIN        = "minimalFamily";
>     private String phoneFamilyDebug;
>     private boolean narrowScreen;
>     private boolean forceWideScreen = false;
>     private boolean supportsDVT_PNG;
>     private boolean needSpacer;
> 
>     public AgentUtil() {
>         phoneFamily = "";
>         phoneFamily=getPhoneFamily();
>         narrowScreen=getNarrowScreen();
>     }
> 
>     /**
>      * Used for skinning. Can be used in page definition for
>      * agent specific rendering.
>      */
>     public String getPhoneFamily() {
>         if (phoneFamily.isEmpty())
>         {
>             FacesContext fc = FacesContext.getCurrentInstance();
>             HttpServletRequest req =
>                 (HttpServletRequest)fc.getExternalContext().getRequest();
>             String agent = req.getHeader("User-Agent");
>             System.out.println(agent);
>            
>             if (agent != null && agent.indexOf("iPhone") > -1)
> {
>                 phoneFamily = IPHONE_SKIN;
>             } else if (agent != null && agent.indexOf("Symbian")
> > -1) {
>                 phoneFamily = SYMBIAN_SKIN;
>             } else if (agent != null && agent.indexOf("iPhone")
> > -1) {
>                 phoneFamily = IPHONE_SKIN;
>             } else if (agent != null && agent.indexOf("WebKit")
> > -1) {
>                 phoneFamily = IPHONE_SKIN;
>             } else if (agent != null && agent.indexOf("BlackBerry95")
> > 
> -1) {
>                 System.out.println("BlackBerry9x");
>                 phoneFamily = BLACKBERRY4_7_SKIN;
>             } else if (agent != null && agent.indexOf("BlackBerry90")
> > 
> -1) {
>                 System.out.println("BlackBerry9x");
>                 phoneFamily = BLACKBERRY4_6_SKIN;
>             } else if (agent != null && agent.indexOf("BlackBerry88")
> > 
> -1) {
>                 phoneFamily = DEFAULT_SKIN;
>                 forceWideScreen = true;
>             } else if (agent != null && agent.indexOf("BlackBerry83")
> > 
> -1) {
>                 phoneFamily = DEFAULT_SKIN;
>                 forceWideScreen = true;
>             } else if (agent != null && agent.indexOf("BlackBerry")
> > -1) {
>                 phoneFamily = DEFAULT_SKIN;
>             } else if (agent != null && agent.indexOf("Windows
> CE") > -1) {
>                 phoneFamily = WINDOWS_FAMILY;
>             } else if (agent != null && agent.indexOf("Firefox")
> > -1) {
>                 phoneFamily = FIREFOX_SKIN;
>             } else {
>                 phoneFamily = DEFAULT_SKIN;
>             }
>         }
>         System.out.println(phoneFamily);
>         return phoneFamily;
>     }
> 
>     public void setPhoneFamily(String phoneFamily) {
>         this.phoneFamily = phoneFamily;
>     }
> 
>     public void setPhoneFamilyDebug(String phoneFamilyDebug)
> {
>         this.phoneFamilyDebug = phoneFamilyDebug;
>     }
> 
>     /**
>      * @return
>      */
>     public String getPhoneFamilyDebug() {
>         String _phoneFamily = getPhoneFamily();
>         if (_phoneFamily.equals(FIREFOX_SKIN) || 
> (_phoneFamily.equals(DEFAULT_SKIN)))
>             return DEFAULT_SKIN;
>         else
>             return _phoneFamily;
>     }
> 
>     public void setNarrowScreen(boolean narrowScreen) {
>         this.narrowScreen = narrowScreen;
>     }
> 
>     public boolean getNarrowScreen() {
>         return (forceWideScreen==false && getPhoneFamily()==DEFAULT_SKIN);
>     }
> 
>     public void setSupportsDVT_PNG(boolean supportsDVT_PNG)
> {
>         this.supportsDVT_PNG = supportsDVT_PNG;
>     }
> 
>     public boolean getSupportsDVT_PNG() {
>         String _phoneFamily = getPhoneFamily();
>         if (_phoneFamily.equals(DEFAULT_SKIN)) {
>             return false;
>             }
>         return true;
>     }
> 
>     public void setNeedSpacer(boolean needSpacer) {
>         this.needSpacer = needSpacer;
>     }
> 
>     public boolean getNeedSpacer()
>     {
>         String _phoneFamily = getPhoneFamily();
> 
>         if ((_phoneFamily.equals(DEFAULT_SKIN)) &&
>                             !this.getNarrowScreen())
>         {
>             return true;
>         }
>         return false;
>     }
> }
> 
> 
> [email protected] wrote:
> > Hello,
> > I have read about rendering Trinidad apps to blackberry devices. Can you 
> > give me some links to read about this (some examples , some fragments code 
> > from implementation maybe)?
> > Best regards,
> > Aurel
> >
> >   
> 

Reply via email to