0

我不知道我是否做错了什么,或者它可能是一个错误或什么。

我的设置包含 IntelliJ IDEA 12、JBoss AS 7.2.0.Final、Richfaces 4.3.4,位于 ear-Project(无 Maven)的 war-File 中。

我有这个索引页:

<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:a4j="http://richfaces.org/a4j" xmlns:rich="http://richfaces.org/rich">
    <rich:notifyMessage stayTime="3500" showShadow="true" showCloseButton="true" />
    <f:view>
        <h:head>    <title>     title   </title>    </h:head>
        <h:body>
            <!-- some more divs for page-design, but commented out at the moment -->
            <div id="page">
                <div id="index_workspace" style="width:1000px;margin:auto;">
                    <h:panelGrid columns="2" id="index_workspace_table">
                        <rich:panel id="index_workspace_navi_left" style="width:180px;min-height:600px;max-height:600px;">
                            <ui:include src="general/navi_left.xhtml"/>
                        </rich:panel>
                        <rich:panel id="index_workspace_content" style="width:550px; min-height:600px; max-height:600px;" rendered="#{not empty naviBean.content}">
                            <a4j:outputPanel id="index_workspace_content_ajax" ajaxRendered="true">
                                    <ui:include src="#{naviBean.content}" id="current_site" />
                            </a4j:outputPanel>
                        </rich:panel>
                    </h:panelGrid>
                </div>
            <!-- some more divs for page-design, but commented out at the moment -->
            </div>
        </h:body>
    </f:view>
</ui:composition>

在该部分中,我加载了带有表单和 RF 带来的所有其他很酷的东西的页面。但是我对加载页面的这一部分有渲染问题:

<rich:select id="someID_1" rendered="true" immediate="true" required="true" enableManualInput="true" defaultLabel="someLabel">
    <a4j:ajax render="true">
        <f:selectItems id="selectlist" value="#{BackingBean.SelectableItem-ListGetter}"/>
    </a4j:ajax>
</rich:select>

我的问题出在:

此下拉列表仅在页面重新加载时呈现,例如 F5 或 CTRL-R 操作。我还可以观察到,如果我将此元素设置在某种“起始页”上(最初加载到 index.xhtml 上),它的渲染效果会非常好。在这种情况下,包含这种元素的每个其他页面也会正确呈现它。

我试过了

  • 将 JSF 从 2.1 更新到 2.2.1——这只会带来更多问题——所以我将其回滚。

  • “标准” h:selectOneMenu 的行为相同。

  • rich:select 中的其他选项(例如:已渲染、立即、必需、...)

  • 导航中的不同 ajax 命令(服务器、客户端、ajax,在不同级别)

  • 几天以来一直在谷歌搜索 - 没有找到有用的提示

我会感激每一个能引导我走向正确方向的暗示,因为我有信心,我犯了一些我无法弄清楚的错误......

此外,我的导航看起来像这样(在 index.xhtml 的另一个 div 中):

<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:a4j="http://richfaces.org/a4j" xmlns:rich="http://richfaces.org/rich">
    <h:form id="navi_left">
        <rich:panel>
            <rich:panelMenu itemMode="ajax" groupMode="ajax" itemChangeListener="#{naviBean.updateContent}" >
            <rich:panelMenuGroup itemLeftIcon="disc" label="Erfassung" name="#{naviBean.content}">
                <rich:panelMenuItem label="someLabel_navi" name="path/to/page-not-getting-rendered-well.xhtml"/>
            </rich:panelMenuGroup>
         </rich:panel>
    </h:form>
</ui:component>

希望这有助于帮助我。

4

2 回答 2

0

我想我找到了问题所在。由于我的导航和我想要的带有未正确呈现的组件的站点嵌套在第三个参与站点上的 <div>s - 我的 index.xhtml - 似乎不可能让一个 jsf 组件在没有全部的情况下呈现(即导航和所需)在服务器上处理的站点。因此,以下代码片段适用于我的情况:

index.xhtml 片段:

<rich:panel id="index_workspace_content" style="width:550px; min-height:600px; max-height:600px;" rendered="#{not empty naviBean.content}">
    <ui:include src="#{naviBean.content}" id="current_site" />
</rich:panel>

navi_left.xhtml 片段:

<h:form id="navi_left">
    <rich:panel>
        <rich:panelMenu itemMode="server" groupMode="client" itemChangeListener="#{naviBean.updateContent}">
            <rich:panelMenuGroup label="someLabel" name="#{naviBean.content}">
                <rich:panelMenuItem label="anotherLabel" name="path/to/page-being-rendered-correctly.xhtml"/>
            </rich:panelMenuGroup>
...
</h:form>

desired.xhtml 中的组件片段:

<rich:select id="someId" rendered="true" immediate="true" required="true" enableManualInput="true">
    <f:selectItems var="#{backingBean.selectableItemList}" id="selectlist" value="#{backingBean.predefinedItem}"/>
</rich:select>

所以我改变的是itemMode到“服务器”,其他两个(ajax 和客户端)都不起作用!将 groupMode 设置为“client”不会影响 desired.xhtml 的渲染过程,因为它只描述了 rich:panelMenu 的行为方式。

让我感到有点困惑的是,URL 现在被扩展为“/index.xhtml”。在更改之前,它始终只是 url:port/context(例如 localhost:8080/app )。

所以它现在有效,但也许这不是我想要的。我将在此处观察并报告有关此itemMode -option 的未来事实。

于 2013-10-30T19:01:39.073 回答
0
 <a4j:ajax render="true">
    <f:selectItems id="selectlist" value="#{BackingBean.SelectableItem-ListGetter}"/>
</a4j:ajax>

上面的构造是不合法的(正如你已经看到的那样)。那里的render属性没有用于您所期望的:有条件地渲染组件;相反,它应该包含要通过 ajax 更新的页面组件列表。

为了实现我认为您想要获得的输出,您应该使用以下内容:

    <a4j:region>
       <rich:select id="someID_1" rendered="true" immediate="true" required="true" enableManualInput="true" defaultLabel="someLabel">
          <f:selectItems id="selectlist" value="#{BackingBean.SelectableItem-ListGetter}"/>
       </rich:select>
    <a4j:region>
于 2013-10-29T15:12:44.313 回答