1

Per Henrik suggested a fix for the strange stretched dialog problems in IE with xPage extensions.

Fixing "stretched" XPage extension library Name Picker in IE?

This worked great and fixed the problem. But it creates an issue with the DateTimePicker. With compatibility mode in place the calendar for the DateTimePicker displays but is immediately closed. I have put together a demo here:

 <xp:this.beforeRenderResponse>
    <![CDATA[#{javascript:  if (context.getUserAgent().isIE()) {
    var response = facesContext.getExternalContext().getResponse();
    response.setHeader("X-UA-Compatible", "IE=8");
}}]]>
</xp:this.beforeRenderResponse>




<xp:inputText id="inputText1">
    <xp:dateTimeHelper id="dateTimeHelper1"></xp:dateTimeHelper>
    <xp:this.converter>
        <xp:convertDateTime type="date"></xp:convertDateTime>
    </xp:this.converter>
</xp:inputText>  
Community
  • 1
  • 1
Bruce Stemplewski
  • 1,343
  • 1
  • 23
  • 66

3 Answers3

3

I have stumbled into the exact same problem. My fix is inspired by a blog post by Paul Withers on the subject and involves using the Dojo DateTextBox and TimeTextBox for IE.

I use standard date fields:

<xp:inputText id="FejlDato" value="#{document.FejlDato}">
    <xp:this.converter>
        <xp:convertDateTime type="date"></xp:convertDateTime>
    </xp:this.converter>
    <xp:dateTimeHelper></xp:dateTimeHelper>
</xp:inputText>

And add a theme id to time fields in order to target them in a theme:

<xp:inputText id="FejlTid" value="#{document.FejlTid}">
    <xp:this.converter>
        <xp:convertDateTime type="time"></xp:convertDateTime>
    </xp:this.converter>
    <xp:this.themeId><![CDATA[${javascript:if (context.getUserAgent().isIE()) { "InputField.TimePicker" }}]]></xp:this.themeId>
    <xp:dateTimeHelper></xp:dateTimeHelper>
</xp:inputText>

I then use the following in a theme to use dijit.form.DateTextBox and dijit.form.TimeTextBox for IE instead of the standard XPages date and time pickers:

<!-- DatePicker for IE8 and IE9 -->
<resources>
    <dojoModule rendered="#{javascript:context.getUserAgent().isIE()}">
        <name>dijit.form.DateTextBox</name>
     </dojoModule>
     <dojoModule rendered="#{javascript:context.getUserAgent().isIE()}">
        <name>dijit.form.TimeTextBox</name>
     </dojoModule>
</resources>
<control>
    <name>InputField.DateTimePicker</name>
    <property>
        <name>dojoType</name>
        <value>#{javascript:context.getUserAgent().isIE()?'dijit.form.DateTextBox':''}</value> 
    </property>
</control>
<control>
    <name>InputField.TimePicker</name>
    <property>
        <name>dojoType</name>
        <value>#{javascript:context.getUserAgent().isIE()?'dijit.form.TimeTextBox':''}</value> 
    </property>
</control>
Per Henrik Lausten
  • 21,331
  • 3
  • 29
  • 76
1

I simply used the dojo date picker and it seemed to work for me. No reason to get themes involved.

Bruce Stemplewski
  • 1,343
  • 1
  • 23
  • 66
1

IE9 works fine, but if you turn on compatibility mode it doesn't... IE Science fiction

Dave
  • 19
  • 1