【问题标题】:b:inputText type "date" not working on IE 11 and Firefox 47.0b:inputText 类型“日期”不适用于 IE 11 和 Firefox 47.0
【发布时间】:2016-10-11 08:52:54
【问题描述】:

我目前正在开发一个使用 JSF 2.2、Bootsfaces 0.8.6 和 Primefaces 5.3 的项目。在注册页面上工作时,我提到了使用 type="date" 时 Bootsfaces 的显示和行为问题。

通常,输入元素有一种占位符,用于显示日期的格式以及元素右端的一些选择元素。在 Chrome 和 Microsoft Edge 上一切正常,但是在使用 IE11 和 Firefox 47.0 的情况下,输入显示为标准文本输入,没有选择元素和格式提示。它看起来与试图解释不支持它的 HTML5 的旧浏览器完全一样。

所以我也在移动设备上使用 Chrome 和 Firefox 进行了尝试,并且没有任何问题。总之,我列出了哪些浏览器可以使用 input 元素,哪些不能:

浏览器(工作)

  • 谷歌浏览器 (51.0.2704.84 m)
  • Android 上的谷歌浏览器 (51.0.2704.81)
  • Android 上的 Mozilla Firefox (47.0)
  • 微软边缘 (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 for PC 上运行?

【问题讨论】:

  • 在 Firefox 中,一些 HTML5 输入不起作用。我遇到了数字字段的问题 - Firefox 将其视为普通输入,与 Chrome 不同,它只允许数字。
  • 所以这是 Firefox 的错误?
  • 我在 SO 中读到了一个问题,说明这是一个已取消的功能 - 无论是在标准还是 Firefox 中。如果我找到它,我会发布它。

标签: jsf firefox internet-explorer-11 android-browser bootsfaces


【解决方案1】:

根据CanIUse,Firefox、IE 和 Opera 都不支持input type="date"。如果the answers to this StackOverflow question 是正确的,这是不是官方 HTML5 标准的 Google 提议。

作为跨浏览器的替代方案,我们提供 BootsFaces 日期选择器:&lt;b:datePicker /&gt;&lt;b:dateTimePicker /&gt;。在our showcase on b:datePicker阅读全文。

顺便说一句,我在您的代码中发现了三个小问题。这些可能是题外话,但也许对您或其他读者来说仍然是有用的信息:

  1. HTML5 由&lt;!DOCTYPE HTML&gt; 激活。另请参阅 the W3Schools arcticle 或 HTML5 规范。您的 doctype 指示浏览器忽略 HTML5。可能大多数浏览器都没有精确地实现规范,但你永远不知道。
  2. 我想知道您为什么将immediate 属性添加到日期选择器中。 immediate 的用途很少。最突出的例子是“取消”按钮。在您的情况下,该属性可能有意义,但我对此表示怀疑。
  3. 这只是一个建议:我宁愿避免重命名事物。只需省略@ManagedBean(name="test") 的参数即可。编写#{testBean.date} 需要更多的击键,但优点是您总是知道类名只是在读取XHTML 文件。是否听从我的建议取决于您,但我的经验是,从长远来看,这会让生活更轻松。

【讨论】:

  • 1.完全错过了这个!我从没想过 Doctype,所以也许我也应该看看我的其他观点。我应该配置自动生成来使用这个 Doctype。 2. 你说得对,在这个例子中立即数没有任何用处。它的一部分是从视图中复制的,所以很明显我错过了删除该属性。 3. 我想知道我为什么要重命名这个bean。通常我不会那样做。我认为这是一个官方的 HTML5 标准。根据这些:1)link 2)link
猜你喜欢
  • 2019-10-26
  • 2016-07-27
  • 1970-01-01
  • 1970-01-01
  • 2012-01-27
  • 2012-02-14
  • 2015-05-07
  • 1970-01-01
  • 2018-10-21
相关资源
最近更新 更多