2

我目前正在使用JSF 2.2,Bootsfaces 0.8.6和Primefaces 5.3的項目。在處理註冊頁面時,我提到了使用type =「date」顯示Bootsfaces行爲的問題。b:inputText類型「日期」不適用於IE 11和Firefox 47.0

通常,輸入元素具有一種佔位符,用於顯示日期格式化的方式以及元素右端的一些選擇元素。在Chrome和Microsoft Edge上一切正常,但在使用IE11和Firefox 47.0的情況下,輸入將顯示爲標準文本輸入,而不包含選擇元素和格式提示。它看起來像一箇舊的瀏覽器試圖解釋不支持它的HTML5。

所以我也試着在Chrome和Firefox的移動設備上運行,沒有任何問題。最後,我做了一個列表,它的瀏覽器與輸入的單元工作和那些不:

瀏覽器(工作)

  • 谷歌瀏覽器(51.0.2704.84米)
  • 谷歌瀏覽器在Android(51.0.2704.81)
  • Mozilla Firefox瀏覽器在Android(47.0)
  • 的Mircosoft邊緣(25.10586.0.0)
  • Safari瀏覽器(沒有版本信息,通過朋友測試)

瀏覽器(不工作)

  • Mozilla Firefox瀏覽器(47.0)
  • 的Internet Explorer(11.306.10586.0)
  • Android瀏覽器(不知道確切的版本)

爲了防止一些明顯的錯誤,我儘量保持以下示例的簡潔和簡潔。它顯示了一個測試我所說的內容的例子。

的index.xhtml

<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:b="http://bootsfaces.net/ui" 
     xmlns:h="http://java.sun.com/jsf/html" 
     xmlns:f="http://java.sun.com/jsf/core" 
     xmlns:p="http://primefaces.org/ui"> 

    <h:head> 
     <meta charset="UTF-8"/> 
    </h:head> 

    <h:body> 
     <h:form id="form"> 
      <b:row style="margin: 1em;"> 
       <b:column span="4"> 
        <b:inputText id="dateInput" type="date" value="#{test.date}" immediate="true"/> 
       </b:column> 
      </b:row> 
     </h:form> 
    </h:body> 
</html> 

TestBean.java(Bean來處理輸入)

import javax.faces.bean.ManagedBean; 
import javax.faces.bean.ViewScoped; 

@ManagedBean(name = "test") 
@ViewScoped 
public class TestBean { 

    private String date; 

    public String getDate() { 
     return date; 
    } 

    public void setDate(String date) { 
     this.date = date; 
     System.out.println(date); 
    } 
} 

我最後的問題是:

  1. 是什麼原因導致這種畸形的輸入元素?
  2. 有沒有解決方案可以讓IE11和Firefox 47.0在PC上運行?
+0

在Firefox中,一些HTML5輸入不起作用。我有一個數字字段的問題 - Firefox將它視爲正常輸入,不像鉻,它只允許數字。 – Bakudan

+0

所以這是一個Firefox的錯誤? – mweber

+0

我在SO中讀到一個問題,這是一個取消的功能 - 無論是在標準模式還是在Firefox。如果我發現它,我會發布它。 – Bakudan

回答

3

根據CanIUse,Firefox,IE和Opera都不支持input type="date"。如果the answers to this StackOverflow question是正確的,那麼Google提案不是官方的HTML5標準。

作爲跨瀏覽器的替代品,我們提供BootsFaces日期選擇器:<b:datePicker /><b:dateTimePicker />。閱讀全文our showcase on b:datePicker

順便說一下,我在代碼中看到三個小問題。這些可能是無關緊要的,但可能對您或其他讀者有用的信息:

  1. HTML5由<!DOCTYPE HTML>激活。另請參閱the W3Schools arcticle或HTML5規範。您的doctype指示瀏覽器忽略HTML5。可能大多數瀏覽器並沒有完全實現這個規範,但你永遠不知道。
  2. 我想知道爲什麼您將immediate屬性添加到日期選擇器。 immediate的用途非常少。最顯着的例子是「取消」按鈕。有可能這個屬性對你的情況有意義,但我懷疑它。
  3. 這只是一個建議:我寧願避免重命名的東西。只要省略參數@ManagedBean(name="test")即可。它需要更多的擊鍵來編寫#{testBean.date},但好處是你總是知道類名只是讀取XHTML文件。這取決於你的意見,但我的經驗是,從長遠來看,它使生活更輕鬆。
+2

關於這些小問題的相關閱讀:1)http://stackoverflow.com/q/16035349 2)http://stackoverflow.com/q/13071512 3)http://stackoverflow.com/q/5697351 – BalusC

+0

1。完全錯過了!我從來沒有想過Doctype,所以也許我應該看看我的其他觀點。我應該配置autogeneration使用此Doctype。 2.你說得對,在這個例子中直接沒有任何用處。它的一部分已從視圖中複製,所以顯然我錯過了刪除屬性。 3.我想知道爲什麼我重命名這個bean。通常我不這樣做。 我認爲這是一個官方的HTML5標準。根據這些: 1)[link](http://www.w3schools.com/html/html_form_input_types.asp) 2)[link](https://www.w3.org/TR/html5/forms html的#日期國有(類型=日期)) – mweber

相關問題