Hai*_*uha 1 java ajax jsf jakarta-ee
我的网页上有这样的东西,一个选择/下拉菜单。此下拉菜单应根据所选项目生成另一个下拉菜单。我这样做的方式是通过调用<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>'
Run Code Online (Sandbox Code Playgroud)
这是支持ajax的bean的功能
public void enableViewCategory(AjaxBehaviorEvent e) {
if (this.getViewCategory().equals("0")) {
this.setShowViewYearSelection(true);
} else {
this.setShowViewCourseSelection(true);
}
}
Run Code Online (Sandbox Code Playgroud)
当我调试时,该功能工作正常。
如果部分呈现不起作用,一个好的起点是查看页面在浏览器中呈现的 html 源代码。render="divYearSelection"
只有当两者(ajax 触发组件和目标组件)具有相同的直接父容器时,您才会工作。
呈现的 html 组件的 ID 通常看起来像id="formId:componentId:nestedComponentId1"
或id="formId:componentId:nestedComponentId2"
因此,render="nestedComponentId2"
只有当两个 ID 具有相同的“预告片”时,才从 component1 调用。
您可以尝试使用示例中给出的完整 id,从表单的 id 开始,或者(如果整个表单不是太大)使用render="@form"
它更新整个表单。
归档时间: |
|
查看次数: |
7615 次 |
最近记录: |