JSF ajax呈现inputText但不呈现panelGrid

时间:2014-01-08 09:55:43

标签: ajax jsf rendering panelgrid

我发现了一个关于JSF的ajax渲染的奇怪行为,我不知道我错过了什么。 为简单起见,我的页面中包含h:inputTexth:panelGrid,其中包含一个按钮。当有人点击该按钮时,h:inputText的值应设置为标准值,h:panelGrid应该会消失。首先,我将展示代码然后我再解释一下。

xhtml页面:

<h:inputText id="trackingIdValue" value="#{bean.trackingId}" />

<h:panelGrid border="15"  id="panel"  rendered="#{not empty bean.list}">
    <h:commandButton action="#{bean.render}" value="Clear Panel" >
        <f:ajax execute="@this" render="panel trackingIdValue" />
    </h:commandButton>
</h:panelGrid>

相应的bean:

private Long trackingId;
private List<String> list;

public Long getTrackingId() {
    return trackingId;
}

public List<String> getList() {
    return list;
}

public void setList( List<String> list ) {
     this.list = list;
}

@PostConstruct
public void init() {
     // the list will be filled with some initial values
}

public void render() {
     this.trackingId = 954643L;
     list.clear();
}

当页面加载时,列表将填充PostConstruct中的一些值。这导致显示面板,因为列表现在不是空的。但是,当我单击面板中的按钮(我更改trackingId并清空列表)时,GUI中的trackingId已更改,但面板仍然可见。我做错了什么?

更新1

正如评论中所写,我在一个空项目中尝试了上面的代码,并且它在那里工作。我目前有一个巨大的应用程序,因此缩小了我的页面并结束了以下内容:

我的项目由多个页面模板组成。在我的主布局中,我有一个h:head标签,可以加载我应用程序所需的许多样式表。当我完全删除h:head标签然后它可以工作但当然我的样式非常糟糕。这与我的ajax加载和panelgrid有什么关系?

更新2

我已将我的申请缩短到一个小页面:

<h:head>
    <h:outputStylesheet name="masterStyle.css" library="css"  />
</h:head>
<h:body>
    <h:form>
        <h:inputText id="trackingIdValue" value="#{testBean.trackingId}" />
        <h:panelGroup border="15" id="panel"
            rendered="#{not empty testBean.list}">
            <h:commandButton action="#{testBean.render}" value="Clear Panel">
                <f:ajax execute="@this" render="panel trackingIdValue" />
            </h:commandButton>
        </h:panelGroup>
    </h:form>
</h:body>
</html>

当我删除标头标签时,ajax请求适用于inputtext和面板。但是当我在标题中添加我的样式表时,ajax只适用于inputtext。

0 个答案:

没有答案