【问题标题】:JSF manual refresh issueJSF 手动刷新问题
【发布时间】:2012-07-03 03:12:52
【问题描述】:

我需要你的帮助。

我正在使用 jsf2.0 和 primefaces 3.2 开发一个简单的项目。

我有 2 页首先是 page1.xhtml 其中包含:

        <p:column>
            <p:panel header="#{ct.coTypeName}" >
                <h:panelGrid columns="1" width="100" height="100">
                    <h:outputText value="#{ct.coTypeId}" />




                    <p:commandLink       action="distributer/distributersList.xhtml">
                        <h:graphicImage  url="/resources/images/homePagecartoonBusinessMan.jpg" width="100" height="100"/>
                        <f:param name="bt" value="dist" />
                        <f:param name="ti" value="#{ct.coTypeId}" />
                    </p:commandLink>

                </h:panelGrid>
            </p:panel>

        </p:column>

    </p:dataGrid>

当我按下命令链接时,它会将我转发到另一个页面“distributer/distributorsList.xhtml”,该页面有一个 selectOneMenu,它不会显示其项目,直到我手动刷新页面时才会出现这种情况,只有 IE “我正在使用 Internet Explorer 8" 但这个问题不会发生在 chrome 或 firefox 上。

我收到 javascript 错误 ..网页错误详情

Message: Object expected
Line: 19
Char: 1
Code: 0
URI: http://localhost:8089/pro/



Message: Object doesn't support this property or method
Line: 1
Char: 5500
Code: 0
URI: http://localhost:8089/pro/faces/javax.faces.resource/primefaces.js?          ln=primefaces&v=3.2

selectonemenucode 是:

<p:selectOneMenu value="#{bussinessOwnersViewerMB.selectedCity}" effect="fold" immediate="true"> 

            <f:selectItems value="#{bussinessOwnersViewerMB.cities}" var="city" itemLabel="#{city.cityName}" itemValue="#{city.cityId}"/>  


         </p:selectOneMenu>

城市数组列表的吸气剂是:

public ArrayList<CityDto> getCities() {
    cities = cb.laodAllCities();
    System.out.println(">>>>"+cities.size());
        return cities;
}

和 system.out.. 给我正确的 arraylist 大小的消息,但 dropdownList 项目在我刷新页面之前不会出现!

【问题讨论】:

    标签: jsf jsf-2 refresh


    【解决方案1】:

    如果使用 f:selectItems 标签,则不需要 itemLabel 和 itemValue 标签。当您使用不带 's' 的 f:selectItem 时将需要这些标签。试试这个示例

         <f:selectItems value="#{bussinessOwnersViewerMB.cityList}" var="city">
    

    这里是获取城市的示例方法

         List<SelectItem> cityList = new ArrayList<SelectItem>();
            for (City city : cities) {
                SelectItem item = new SelectItem();
                item.setLabel(city.getCityName());
                item.setValue(city.getCityId());
                cityList.add(item);
         }
    

    将 f:selectItems 值与更改原始城市列表的 cityList(检查上述)绑定。

    【讨论】:

    • 感谢 Sai Ye Yan Naing Aye 的快速回复,但我的代码示例中已经显示了数据.. 主要问题是直到我刷新页面才显示数据。我以任何方式尝试您的代码并按预期获得相同的结果..thanx 再次:)
    【解决方案2】:

    elgohary 做一件事亲爱的拿一个布尔变量,比如 isLoaded 并将以下代码放入 Lode 方法中

    `

        if (isLoaded)
        {
            return;
        }
        isLoaded = true;
    

    ` 以及您需要在该操作中刷新页面的位置,请执行以下操作

    isLoaded=false;
    

    【讨论】:

    • 感谢 Jigar Patel,但是我使用支持 bean 编辑了我的帖子,并且我的托管 bean 已经正确地获取了 arrayList .. 如果我重定向到distributor.xhtml 页面,则会出现 SelectOneMenu 项目,但我想要转发它而不是重定向,因为我使用请求发送参数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-22
    • 2018-11-20
    • 2011-01-12
    • 2013-03-11
    • 2012-09-02
    • 1970-01-01
    相关资源
    最近更新 更多