2010-09-07 26 views
7

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.

+0

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

+1

':' 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

Trả lời

4

Nó hoạt động khi bạn đặt bảng bên trong một <h:form>. Xóa bên trong <h:form> khỏi cột và thay thế <h:panelGroup id="list-packages"> theo <h:form id="list-packages">.

Tôi không chắc chắn cách thức/tại sao vấn đề này được gây ra (cần nhiều thời gian hơn để điều tra) nhưng có thể liên quan đến thực tế rằng trạng thái của bảng quan trọng là phải biết hàng nào đã được chọn.

2

Sự cố này rất có thể là do điều này JSF bug nơi bạn không thể có mục tiêu ajax chứa biểu mẫu được cập nhật từ biểu mẫu khác. Sự cố đang được xử lý dưới dạng sự cố cụ thể và được theo dõi here. Báo cáo lỗi có cách giải quyết liên quan đến chỉnh sửa đối với jsf.js nếu bạn thích sống ở cạnh.

Với việc sử dụng ajax và khả năng kiểm soát nội dung được gửi đến máy chủ với thực thi = Cá nhân tôi cảm thấy rằng có một đối số tốt cho việc sử dụng một biểu mẫu trên mỗi trang (ngoại trừ một số trường hợp hiếm hoi chẳng hạn như một số tệp tải lên và hộp thoại triển khai hộp) và bạn không bị bắt gặp bởi những rủi ro về việc đặt tên dễ bị quên và các vấn đề như vấn đề này.

Các vấn đề liên quan