jsf - 无法为操作 : JSF 找到 from-view-id '/index.xhtml' 的匹配导航案例

标签 jsf navigation

我收到以下错误: 无法为操作“#{medcontroller.getMedGeneric}”找到与 from-view-id“/index.xhtml”匹配的导航案例,结果为“javax.faces.model.ListDataModel@7a652236”

我是 jsf 新手,对于解决这个错误我真的一无所知。我有一个包含以下代码的 ManagedBean:

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";
    }

}

这是我的 JSF 文件

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>

请帮我解决这个错误。 另外,我没有 faces-config.xml 文件。我正在使用带有 jsf 和 hibernate 框架的 netbeans ide 7.1.2 Web 应用程序。

提前谢谢您。

最佳答案

<h:commandButton action>必须指向一个调用某些业务逻辑并返回 void 的方法或String代表您想要(重新)显示的目标页面。然而你返回了整个 ListDataModel这对于 JSF 导航处理程序没有任何意义,因此会出现此错误。

类似这样的事情应该做:

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

    return "someViewId";
}

这将导航至someViewId.xhtml 。但是,如果您打算坚持相同的 View ,只需让它返回 void (或 null ),它将重新显示相同的 View 。

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

顺便说一下,在操作方法名称前加上 get 确实是一个糟糕的命名约定。 。这很令人困惑,并且使您的代码无法 self 记录。而是将其命名为loadMedGeneric()或者。我只是猜测,因为您没有告诉任何具体的功能要求,所以该按钮到底应该做什么。

关于jsf - 无法为操作 : JSF 找到 from-view-id '/index.xhtml' 的匹配导航案例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18427338/

相关文章:

java - JSF primefaces 显示对象列表而不是字符串列表

html - 强制 JSF 转义 unicode 中的特殊字符

css - PrimeFaces 2.2.1 在本地看起来与在展示中有所不同

java - JSF:丰富的数据表过滤、动态列和传递参数

c++ - 有什么工具可以将c/c++源代码转换成html吗?

css - CSS3 中均匀间隔的导航链接占据 ul 的整个宽度

python - 为什么更改我的 xpath 可以让我的 selenium click 始终如一地工作?

css - PrimeFaces 对话框标题大小不正确

html - 使整个 <li> 成为具有适当 HTML 的链接

javascript - 如何使用向上或向下键在动态填充的 li 元素之间导航