【问题标题】:JSF rendered is not workingJSF 渲染不工作
【发布时间】:2011-08-19 21:11:27
【问题描述】:

我的网页上有类似的东西,一个选择/下拉菜单。此下拉菜单应根据所选项目生成另一个下拉菜单。我这样做的方式是调用<f:ajax event="change"..listener=..>

但这并没有像我预期的那样发生。在下拉菜单中选择项目触发 ajax 标记中的侦听器时,以下下拉表的 rendered 属性似乎不受更改的影响。 rendered 的值已成功从 false 更改为 true。哪个..让我想知道我的 jsf 页面出了什么问题。

这里是 xhtml '

                        <h:selectOneMenu value="#{teacher.viewCategory}">
                            <f:selectItem itemValue="0" itemLabel="Tahun" />
                            <f:selectItem itemValue="1" itemLabel="Mata Pelajaran" />
                            <f:ajax event="change" render="divYearSelection divCourseSelection"
                                    listener="#{teacher.enableViewCategory}"/>
                        </h:selectOneMenu>

                        <h:panelGroup id="divYearSelection" layout="block" rendered="#{teacher.showViewYearSelection}">
                            <h:outputText value="YEAR"/>
                        </h:panelGroup>

                        <h:panelGroup id="divCourseSelection" layout="block" rendered="#{teacher.showViewCourseSelection}">
                            <h:outputText value="COURSE"/>
                        </h:panelGroup>


                        <h:commandButton value="#{msg.tcr_form_submit_view}" action="#{teacher.viewTeacher}"/>
                    </h:panelGrid>
                </h:form>' 

这是支持ajax的bean函数

public void enableViewCategory(AjaxBehaviorEvent e) {       
        if (this.getViewCategory().equals("0")) {
            this.setShowViewYearSelection(true);
        } else {
            this.setShowViewCourseSelection(true);
        }
    } 

当我调试时,该功能工作正常。

【问题讨论】:

  • 在 ajax 命令中使用render="@form" 是否有效?
  • 这样就行了!您介意在 ajax 标签上向我解释更多吗?另外,把它作为一个答案,这样我就可以给你打分。谢谢!
  • @Matt 你能把这个作为答案发给我吗?
  • 刚刚发布!很高兴听到它有效!

标签: java ajax jsf jakarta-ee


【解决方案1】:

如果部分呈现不起作用,一个好的起点是查看页面的 html 源代码,因为它在浏览器中呈现。您的 render="divYearSelection" 仅在两者(ajax 触发组件和目标组件)具有相同的直接父容器时才有效。

呈现的 html 组件的 ID 通常看起来像 id="formId:componentId:nestedComponentId1" 或 id="formId:componentId:nestedComponentId2"

因此,从 component1 调用的 render="nestedComponentId2" 仅在两个 id 具有相同的“预告片”时才有效。

您可以尝试使用示例中给出的完整 id,从表单的 id 开始,或者(如果整个表单不是太大)使用 render="@form" 更新整个表单。

【讨论】:

  • 我也遇到了同样的问题...render="message" 和 render=":message" 都在工作。我做了render="form:message",它正在工作!您能解释一下原因吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-21
  • 1970-01-01
  • 2014-01-17
  • 1970-01-01
  • 2014-07-14
  • 1970-01-01
  • 2011-09-26
相关资源
最近更新 更多