2013-08-25 51 views
5

Tôi nhận được lỗi sau: Không thể tìm trường hợp điều hướng phù hợp với từ-view-id '/index.xhtml 'for action' # {medcontroller.getMedGeneric} 'với kết quả' [email protected] 'Không thể tìm trường hợp điều hướng phù hợp với từ-view-id '/index.xhtml' cho hành động: JSF

Tôi mới dùng jsf và tôi thực sự không biết gì về việc giải quyết lỗi này. Tôi có một ManagedBean với đoạn mã sau:

MedController.java

@ManagedBean(name = "medcontroller") 
@SessionScoped 

public class MedController implements Serializable { 
    int startId; 
    String gName; 
    int endId; 
    DataModel medNames; 
    //DataModel medGeneric; 
    MedicineHelper helper; 
    private int recordCount = 1000; 
    private int pageSize = 10; 
    private Medicine current; 
    private int selectedItemIndex; 

    public MedController() { 
     helper = new MedicineHelper(); 
     startId = 1; 
     endId = 10; 
    } 

    public MedController(int startId, int endId) { 
     helper = new MedicineHelper(); 
     this.startId = startId; 
     this.endId = endId; 
    } 

    public Medicine getSelected() { 
     if (current == null) { 
      current = new Medicine(); 
      selectedItemIndex = -1; 
     } 
     return current; 
    } 

    public DataModel getMedNames() { 
     if (medNames == null) { 
      medNames = new ListDataModel(helper.getMedNames(startId, endId)); 
     } 
     return medNames; 
    } 

    public String getgName() 
     { 
     return gName; 
    } 

    public void setgName(String gName) 
     { 
     this.gName = gName; 
    } 

    public DataModel getMedGeneric() { 
     if (medNames == null) { 
      medNames= new ListDataModel(helper.getMedGeneric(gName)); 
     } 
     return medNames; 
    } 

    void recreateModel() { 
     medNames = null; 
    } 

    public boolean isHasNextPage() { 
     if (endId + pageSize <= recordCount) { 
      return true; 
     } 
     return false; 
    } 

    public boolean isHasPreviousPage() { 
     if (startId-pageSize > 0) { 
      return true; 
     } 
     return false; 
    } 

    public String next() { 
     startId = endId+1; 
     endId = endId + pageSize; 
     recreateModel(); 
     return "index"; 
    } 

    public String previous() { 
     startId = startId - pageSize; 
     endId = endId - pageSize; 
     recreateModel(); 
     return "index"; 
    } 

    public int getPageSize() { 
     return pageSize; 
    } 

    public String prepareView(){ 
     current = (Medicine) getMedNames().getRowData(); 
     return "browse"; 
    } 
    public String prepareList(){ 
     recreateModel(); 
     return "index"; 
    } 

} 

Và đây là tập tin JSF của tôi

index.xhtml

<ui:define name="body"> 
    <h:form styleClass="jsfcrud_list_form"> 
    <h:commandLink action="#{medcontroller.previous}" value="Previous #{medcontroller.pageSize}" rendered="#{medcontroller.hasPreviousPage}"/> 
    <h:commandLink action="#{medcontroller.next}" value="Next #{medcontroller.pageSize}" rendered="#{medcontroller.hasNextPage}"/> 
    <h:dataTable value="#{medcontroller.medNames}" var="item" border="1" cellpadding="15" cellspacing="10" rowClasses="jsfcrud_odd_row,jsfcrud_even_row" rules="all" style="border:solid 1px"> 
    <h:column> 
     <f:facet name="header"> 
      <h:outputText value="BrandName"/> 
     </f:facet> 
      <h:outputText value="#{item.brandName}"/> 
    </h:column> 
    <h:column> 
     <f:facet name="header"> 
      <h:outputText value="Generic"/> 
     </f:facet> 
      <h:outputText value="#{item.generic}"/> 
    </h:column> 
    <h:column> 
     <f:facet name="header"> 
      <h:outputText value=" "/> 
     </f:facet> 
      <h:commandLink action="#{medcontroller.prepareView}" value="View"/> 
    </h:column> 
    </h:dataTable> 

    <h:inputText value="#{medcontroller.gName}" /> 
    <h:commandButton value="Submit" action="#{medcontroller.getMedGeneric}" /> 
    </h:form> 
</ui:define> 

Xin hãy giúp tôi giải quyết các lỗi. Ngoài ra, tôi không có tệp faces-config.xml. Tôi đang sử dụng ứng dụng web 7.1.2 netbeans ide với khung công tác jsf và hibernate.

Cảm ơn bạn trước.

+0

Bạn quên nói chính xác những gì bạn muốn xảy ra khi bạn nhấn nút đó "submit". – BalusC

Trả lời

5

Các <h:commandButton action> phải trỏ đến một phương pháp mà gọi một số logic kinh doanh và trả về một trong hai void hoặc một String đại diện cho trang mục tiêu mà bạn muốn (lại) hiển thị. Tuy nhiên, bạn đã trả lại toàn bộ ListDataModel mà không có ý nghĩa gì với trình xử lý điều hướng JSF và do đó là lỗi này.

Something như thế này nên làm:

public String getMedGeneric(){ 
    // Do your business logic here. 

    return "someViewId"; 
} 

này sẽ hướng đến someViewId.xhtml. Tuy nhiên, nếu bạn có ý định dính vào cùng một chế độ xem, chỉ cần để nó trở về void (hoặc null) và nó sẽ hiển thị lại cùng một chế độ xem.

public void getMedGeneric(){ 
    // Do your business logic here. 
} 

Bằng cách này, nó thực sự là quy ước đặt tên kém với tên phương thức hành động tiền tố có get. Điều này gây nhầm lẫn và làm cho mã của bạn không tự ghi lại tài liệu. Thay vào đó, hãy đặt tên nó là loadMedGeneric() hoặc hơn. Tôi chỉ đoán là bạn không nói bất cứ nơi nào về yêu cầu chức năng cụ thể, chính xác nút đó nên làm gì.

+0

Cảm ơn, nó đã hoạt động. – GobSmack

+0

Xong, cảm ơn lần nữa. – GobSmack

0

getMedGeneric sẽ trả về java.lang.String đại diện cho điều hướng đến trang khác được mô tả trong faces-config.xml. Trong trường hợp của bạn nó trả về một số mô hình để nó sẽ không làm việc unfortunatell. Hãy thử đặt getMedGeneric() action thành actionListener và sau đó trong hành động đặt String điều hướng. tức là:

action="navString" actionListener="#{medcontroller.getMedGeneric}" 
+1

Cảm ơn bạn đã trả lời nhưng không hoạt động, vẫn hiển thị lỗi: Không thể tìm thấy trường hợp điều hướng phù hợp với từ-view-id '/index.xhtml' cho hành động 'navString' với kết quả 'navString' – GobSmack

-2

bạn nên cố gắng chỉ

actionListener="#{medcontroller.getMedGeneric}"