【问题标题】:Primefaces components not rendering properlyPrimefaces 组件无法正确渲染
【发布时间】:2013-02-27 12:56:59
【问题描述】:

我正在开发一个 Spring3/JSF2/Primefaces3.5 应用程序。

我面临的问题是某些 Primefaces 组件 (p:autocomplete、p:calendar 和 p:selectOneMenu) 无法在浏览器中正确呈现。 该问题在许多页面中随机出现。 如果我重新加载页面(例如通过 F5 键),问题就会得到纠正,并且组件会按应有的方式呈现。

.xhtml 文件:

<ui:composition  
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:c="http://java.sun.com/jstl/core"
    xmlns:p="http://primefaces.org/ui">

    <h:form id="mainForm">

    ....


    <f:validateBean>
        <table class="listing form" cellpadding="0" cellspacing="0">
                ...
                (some p:inputText elements)
                ...

            <tr class="bg">
                <td class="first"><strong>Marque :</strong></td>
                <td class="last">
                    <p:autoComplete
                        label="Marque"
                        value="#{montureBean.marque}"
                        completeMethod="#{montureBean.autocompleteMarque}"
                        var="item"
                        itemLabel="#{item.intitule}"
                        itemValue="#{item}"
                        converter="#{montureBean.marqueConverter}"
                        dropdown="true"/>

                    <p:commandLink onclick="dlgMarque.show()"  immediate="true">
                        <img src="/images-main/add-icon.gif" border="0" alt="Ajouter Marque" class="img-action"/>
                    </p:commandLink>
                </td>
            </tr>                                    
            <tr class="bg">
                <td class="first"><strong>Matière :</strong></td>
                <td class="last">
                    <p:autoComplete
                        label="Matière"
                        value="#{montureBean.matiere}"
                        completeMethod="#{montureBean.autocompleteMatiere}"
                        var="item"
                        itemLabel="#{item.intitule}"
                        itemValue="#{item}"
                        converter="#{montureBean.matiereConverter}"
                        dropdown="true"/>

                    <p:commandLink onclick="dlgMatiere.show()"  immediate="true">
                        <img src="/images-main/add-icon.gif" border="0" alt="Ajouter Matière" class="img-action"/>
                    </p:commandLink>
                </td>
            </tr>                                    

        </table>
    </f:validateBean>

    </h:form>
</ui:composition>

下面是 p:autocomplete 生成代码的示例:

错误的渲染:

    <span aria-multiline="false" aria-disabled="false" role="textbox" id="mainForm:j_id_q_1i" class="ui-autocomplete">
        <input id="mainForm:j_id_q_1i_input" name="mainForm:j_id_q_1i_input" class="ui-autocomplete-input ui-inputfield ui-widget ui-state-default ui-corner-left" autocomplete="off" value="" type="text">
        <input id="mainForm:j_id_q_1i_hinput" name="mainForm:j_id_q_1i_hinput" autocomplete="off" value="0" type="hidden">
        <button class="ui-button ui-widget ui-state-default ui-corner-right ui-button-icon-only" type="button">
            <span class="ui-button-icon-primary ui-icon ui-icon-triangle-1-s"></span>
            <span class="ui-button-text">&nbsp;</span>
        </button>
        <div id="mainForm:j_id_q_1i_panel" class="ui-autocomplete-panel ui-widget-content ui-corner-all ui-helper-hidden ui-shadow"></div>
    </span>

正确的渲染:

        <span id="mainForm:j_id_q_1i" class="ui-autocomplete">
            <input id="mainForm:j_id_q_1i_input" name="mainForm:j_id_q_1i_input" type="text" class="ui-autocomplete-input ui-inputfield ui-widget ui-state-default ui-corner-left" autocomplete="off" value="" />
            <input id="mainForm:j_id_q_1i_hinput" name="mainForm:j_id_q_1i_hinput" type="hidden" autocomplete="off" value="0" />
            <button class="ui-button ui-widget ui-state-default ui-corner-right ui-button-icon-only" type="button">
                <span class="ui-button-icon-primary ui-icon ui-icon-triangle-1-s"></span>
                <span class="ui-button-text">&nbsp;</span>
            </button>
            <div id="mainForm:j_id_q_1i_panel" class="ui-autocomplete-panel ui-widget-content ui-corner-all ui-helper-hidden ui-shadow"></div>
        </span>
        <script id="mainForm:j_id_q_1i_s" type="text/javascript"><!--
            $(function(){PrimeFaces.cw('AutoComplete','widget_mainForm_j_id_q_1i',{id:'mainForm:j_id_q_1i'});});
        //--></script>

我注意到:

  • 许多属性分配给第一个跨度而不是输入,
  • 两个输入元素在错误的渲染中没有关闭>代替/>
  • 有一个 javascript 函数出现在正确的渲染中,我们在错误的情况下看不到。

这是一个错误还是我做错了什么。 注意:我使用 p:layout 进行页面组织,使用 f:validation 验证输入元素。

【问题讨论】:

  • 你能显示xhtml页面吗?尤其是DOCTYPE 定义。
  • 感谢您的关注我更新了我的帖子
  • 我仍然没有看到DOCTYPE 的定义。在顶级页面的某处找到它,因为这是某个模板的一部分。如果不存在,请将&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt; 作为顶级xhtml 文件的第一行。
  • 我有一个 index.xhtml 文件,它通过 ui:include 调用上述 xhtml 文件。 index.html 以 开头。下一行包含您所说的文档类型: ttp://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" rel="nofollow" target="_blank">w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

标签: javascript jsf autocomplete primefaces rendering


【解决方案1】:

终于解决了!

真的很难找出我的项目出了什么问题,因为它随机发生并影响了许多页面。

问题是我正在使用“p:panel”,它使用“ui:include”的 src 属性更新,如下所示:

<p:panel id="mainPanel">
    <ui:include src="#{menuBean.mainContentPage}.xhtml" />
</p:panel>

菜单元素只是将“mainContentPage”的值设置为内容文件的名称(例如 addClient.xhtml、addStore.xhtml )以通过 ajax 更新显示和更新“mainPanel”。

每个 .xhtml 内容文件都有自己的表单和组件。

我犯的错误是不同文件中的所有表单都具有相同的 ID。

  <h:form id="mainForm">
          ….commandlinks and components….
  </h:form>

我认为为每个表单指定不同的名称并不是很重要,因为面板会使用新内容进行更新。不幸的是,系统将表单名称保留在某处,并且组件的呈现受到影响。

我更改了 .xhtml 文件中所有表单的 ID,一切正常。

给大家的重要建议:在您的 JSF 项目中为每个表单使用不同的 ID

【讨论】:

  • 感谢您的建议,我遵循了这一点,但问题在 IE 11 中无法解决,在 chrome 和 firefox 下一切正常
  • 你的IE可能有很多问题。就个人而言,我使我的应用程序仅适用于 chrome 和 Firefox。我放弃了对 IE 的适配。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-01
  • 1970-01-01
  • 2020-06-13
  • 1970-01-01
  • 2019-07-21
相关资源
最近更新 更多