Trong trang JSF của tôi, tôi có một hộp tổ hợp cập nhật bảng khi một mục của combobox được chọn.Cập nhật JSF Ajax khiến commandLink thất bại tại lần nhấp đầu tiên
Bảng chứa các mục có liên kết chỉnh sửa.
Vấn đề là khi bảng được thay đổi bởi combobox bạn cần phải bấm hai lần vào liên kết để đi đến trang. Nhấp chuột đầu tiên chỉ cần làm mới trang.
Đây là xhtml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
<html 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">
<body>
<ui:composition template="/template.xhtml">
<ui:define name="windowTitle">Comment packages</ui:define>
<ui:define name="content">
<h3>Select the package to comment.</h3>
<h:form prependId="false">
Section:
<h:selectOneMenu id="selectSection" value="#{platformService.currentSection}">
<f:ajax render=":list-packages" />
<f:selectItems value="#{platformService.releasePlatform.sections}" />
</h:selectOneMenu>
</h:form>
<p/>
<h:panelGroup id="list-packages">
<h:dataTable id="packageList" var="package" value="#{packageService.packages}" border="1" >
<h:column>
<f:facet name="header">Package name</f:facet>
#{package.name}
</h:column>
<h:column>
<h:form>
<h:commandlink action="#{commentService.commentPackage}" value="Comment">
<f:param name="packageName" value="#{package.name}" />
</h:commandLink>
</h:form>
</h:column>
</h:dataTable>
</h:panelGroup>
</ui:define>
</ui:composition>
</body>
</html>
Tôi cũng đã thử với CommandButton nhưng bạn cũng cần phải nhấp đúp chuột vào nút.
Tôi đang chạy JSF 2.0.1-FCS trong Maven/Jetty.
Tại sao có ": danh sách gói" không phải "danh sách gói" trong f: ajax render thuộc tính? Có lẽ đây là vấn đề? Có lẽ bảng không được hiển thị lại? – amorfis
':' là do thành phần hiển thị bên ngoài biểu mẫu. http://ocpsoft.com/java/jsf2-java/how-to-jsf-2-0-render-components-outside-of-the-form/ Bảng được cập nhật/hiển thị chính xác nhưng các liên kết trong bảng cần phải được bấm hai lần để đi đến trang. – Anthony