2010-06-15 27 views
8

Đây là giai đoạn Listener tôihành động không được gọi trong JSF

public class AdminPhaseListener implements PhaseListener { 

private static final long serialVersionUID = -1161541721597667238L; 

public void afterPhase(PhaseEvent e) { 
    System.out.println("after Phase " + e.getPhaseId()); 
} 

public void beforePhase(PhaseEvent e) { 
    System.out.println("before Phase " + e.getPhaseId()); 
    if(e.getPhaseId()== PhaseId.RESTORE_VIEW) 
    { 

    } 

} 

public PhaseId getPhaseId() { 
    return PhaseId.ANY_PHASE; 
}} 

On bấm vào một nút lệnh trong trang của tôi, tôi gọi một phương pháp hành động và thực hiện một số chế biến nhưng phương pháp hành động không được gọi ở tất cả , nhưng trong nhật ký máy chủ, tôi có thể thấy các thông báo được in bởi PhaseListener của tôi cho tất cả các Giai đoạn.

Nếu chế độ xem của tôi không bị thay đổi, Nó sẽ dừng lại sau giai đoạn RESTORE_VIEW phải không?

bất kỳ suy nghĩ nào?

Thêm mã cho Làm thế nào tôi hiển thị các nút lệnh:

<table width="100%"> 
      <h:column rendered="#{adminBean.displayResultsSize > 0}"> 

       <tr> 
        <td colspan="14" height="5" nowrap="nowrap" class="WhiteRow"></td> 
       </tr> 
       <tr> 
        <td colspan="14" height="1" nowrap="nowrap" align="center" 
         bgcolor="#999999"></td> 

       </tr> 
       <h:inputHidden id="removeUserId" value="#{adminBean.removeUserId}"/> 
       <h:inputHidden id="removeIBD" value="#{adminBean.removeIBD}"/> 
       <h:inputHidden id="removeAPA" value="#{adminBean.removeAPA}"/> 
       <tr> 
        <td colspan="14" height="30" nowrap="nowrap" 
         class="FilterColumnGrayHeader" align="center">&nbsp;&nbsp;&nbsp; 
        <input type="button" disabled="disabled" id="button_edit" 
         value="Edit Details" class="disabledfield" 
         onclick="populateEditRow();"> 
        </input> <h:commandButton type="submit" class="disabledfield" immediate="true" 
         id="button_remove" value="Remove" onclick="populateRemoveRow();" action="#{adminBean.remove}"> 
        </h:commandButton> &#160; 

        </td> 
       </tr> 
       <tr bgcolor="#000000"> 
        <td colspan="14" height="1" nowrap="nowrap" align="center" 
         bgcolor="#999999"></td> 
       </tr> 
       <tr> 
        <td height="10"></td> 
       </tr> 
      </h:column> 
     </table> 

Trả lời

30

tôi trích dẫn từ this answer:

Bất cứ khi nào một thành phần UICommand thất bại để gọi các hành động liên quan, xác minh những điều sau đây:

  1. UICommand thành phần phải được đặt bên trong một thành phần UIForm (ví dụ h:form).
  2. Bạn không thể làm tổ nhiều thành phần UIForm với nhau (xem ra bao gồm các tệp!).
  3. Không xảy ra lỗi xác thực/chuyển đổi (sử dụng h:messages để nhận tất cả).
  4. Nếu các thành phần UICommand được đặt bên trong thành phần UIData, hãy đảm bảo rằng chính xác cùng một DataModel (đối tượng phía sau thuộc tính value) được giữ nguyên.
  5. Thuộc tính rendereddisabled của thành phần và tất cả các thành phần chính không được đánh giá là false trong khi áp dụng pha giá trị yêu cầu.
  6. Hãy chắc chắn rằng không có PhaseListener hoặc bất kỳ EventListener trong chuỗi yêu cầu phản hồi đã thay đổi vòng đời JSF để bỏ qua giai đoạn hành động gọi.
  7. Đảm bảo rằng không có Filter hoặc Servlet trong cùng một chuỗi yêu cầu phản hồi đã chặn yêu cầu cho số FacesServlet bằng cách nào đó.

Một nguyên nhân khác có thể là bạn không chạy mã mà bạn nghĩ mình đang chạy.

+1

@gekrish Giống như tôi trong hầu hết các trường hợp. Điều này có thể nhanh chóng xảy ra nếu tham số view được lưu một cách lỏng lẻo trong một biến có phạm vi yêu cầu như: '' Một phạm vi flash tùy chọn cho 'f: param' sẽ là tuyệt vời. Khác tôi luôn luôn lưu nó trong một cái nhìn-phạm vi đậu. – djmj

3

Điều này thường có nghĩa là có lỗi xác nhận trên trang. Hãy thử đặt immediate="true" để khắc phục lỗi hoặc sử dụng <h:messages> để hiển thị lỗi phát sinh.

+0

Vui lòng giải thích cách các lỗi kết quả "ngay lập tức =" đúng "xảy ra mà không có lỗi. Điều gì xảy ra với lý do lỗi? –

0

Kiểm tra xem có lỗi nào được tạo trên bất kỳ trình thiết lập nào của các thành phần của bạn hay không.

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