Ошибка "тег не найден" - PullRequest
       8

Ошибка "тег не найден"

4 голосов
/ 10 августа 2010

Я пытаюсь реализовать очень простое приложение RichFaces (следуя примеру в руководстве разработчика , но сталкиваюсь с ошибкой, которую не могу устранить.

Мой код выглядит для правильной сборки и развертывания в Tomcat (localhost), но когда открывается страница индекса, я получаю исключение:

javax.faces.view.facelets.TagException: /index.xhtml @13,19 <a4j:form> Tag Library supports namespace: http://richfaces.org/a4j, but no tag was defined for name: form

Страница индекса, которую я пытаюсь загрузить, выглядит следующим образом:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:a4j="http://richfaces.org/a4j"
  xmlns:rich="http://richfaces.org/rich"
  xmlns:f="http://java.sun.com/jsf/core">
<h:head>
    <title>Facelet Title</title>
</h:head>
<h:body><f:view>
    <a4j:form>
        <rich:panel header="This is the title" style="width:400px;">
            <h:outputText value="Enter your name:"/>
            <h:inputText value="#{MyBean.message}">
                <f:validateLength minimum="1" maximum="20"/>
            </h:inputText>
        </rich:panel>
    </f:view></a4j:form>
</h:body>
</html>

Насколько я могу судить, это то же самое, что и пример в руководстве для разработчиков. Я занимаюсь разработкой в ​​Netbeans 6.8, используя реализацию MySaces JSF 2.0, и добавил библиотеки RichFaces и Apache Commons jar в качестве библиотек, и тег, который указывает исключение, фактически автоматически предлагается Netbeans!

Из Apache Commons я добавил:
бобовые, коллекции, варочный котел, лесозаготовка

Из RichFaces я добавил: richfaces-API, Richfaces-Impl, Richfaces-Impl-JSF2, Richfaces-UI

Если было бы полезно предоставить код компонента и / или web.xml, скажите, пожалуйста, я просто хотел избежать огромного поста за то, что может быть простой ошибкой.

Ответы [ 4 ]

4 голосов
/ 10 июля 2012

Для RichFaces 4.x используйте «rich: popupPanel». Я получил это от RichShowCase:

<a4j:status onstart="#{rich:component('statPane')}.show()"
    onstop="#{rich:component('statPane')}.hide()" />
<h:form id="form">
    <rich:dataTable value="#{carsBean.allInventoryItems}" var="car"
        iterationStatusVar="it" id="table" rows="15">
        <rich:column>
            <f:facet name="header">#</f:facet>
            #{it.index}
        </rich:column>
        <rich:column>
            <f:facet name="header">Vendor</f:facet>
            <h:outputText value="#{car.vendor}" />
        </rich:column>
        <rich:column>
            <f:facet name="header">Model</f:facet>
            <h:outputText value="#{car.model}" />
        </rich:column>
        <rich:column>
            <f:facet name="header">Price</f:facet>
            <h:outputText value="#{car.price}" />
        </rich:column>
        <rich:column>
            <f:facet name="header">Mileage</f:facet>
            <h:outputText value="#{car.mileage}" />
        </rich:column>
        <rich:column>
            <f:facet name="header">VIN</f:facet>
            <h:outputText value="#{car.vin}" />
        </rich:column>
        <rich:column>
            <a4j:commandLink styleClass="no-decor" execute="@this"
                render="@none" oncomplete="#{rich:component('confirmPane')}.show()">
                <h:graphicImage value="/images/icons/delete.gif" alt="delete" />
                <a4j:param value="#{it.index}"
                    assignTo="#{carsBean.currentCarIndex}" />
            </a4j:commandLink>
            <a4j:commandLink styleClass="no-decor" render="editGrid"
                execute="@this" oncomplete="#{rich:component('editPane')}.show()">
                <h:graphicImage value="/images/icons/edit.gif" alt="edit"/>
                <a4j:param value="#{it.index}"
                    assignTo="#{carsBean.currentCarIndex}" />
                <f:setPropertyActionListener target="#{carsBean.editedCar}"
                    value="#{car}" />
            </a4j:commandLink>
        </rich:column>
        <f:facet name="footer">
            <rich:dataScroller page="#{carsBean.page}" />
        </f:facet>
    </rich:dataTable>

    <a4j:jsFunction name="remove" action="#{carsBean.remove}"
        render="table" execute="@this"
        oncomplete="#{rich:component('confirmPane')}.hide();" />

<rich:popupPanel id="statPane" autosized="true">
    <h:graphicImage value="/images/ai.gif" alt="ai" />
    Please wait...
</rich:popupPanel>

<rich:popupPanel id="confirmPane" autosized="true">
    Are you sure you want to delete the row?
    <a4j:commandButton value="Cancel"
        onclick="#{rich:component('confirmPane')}.hide(); return false;" />
    <a4j:commandButton value="Delete" onclick="remove(); return false;" />
</rich:popupPanel>

<rich:popupPanel header="Edit Car Details" id="editPane" domElementAttachment="parent" width="400" height="170">
        <h:panelGrid columns="3" id="editGrid">
            <h:outputText value="Vendor" />
            <h:outputText value="#{carsBean.editedCar.vendor}" />
            <h:panelGroup />
            <h:outputText value="Model" />
            <h:outputText value="#{carsBean.editedCar.model}" />
            <h:panelGroup />
            <h:outputText value="Price" />
            <h:inputText value="#{carsBean.editedCar.price}" required="true"
                requiredMessage="Price is required" id="price"
                converterMessage="Should be a valid price"
                validatorMessage="Should be a valid price" label="Price field">
                <f:validateDoubleRange/>
            </h:inputText>
            <rich:message id="priceMsg" for="price" />
            <h:outputText value="Mileage" />
            <h:inputText value="#{carsBean.editedCar.mileage}" id="mage"
                converterMessage="Should be a valid mileage"
                validatorMessage="Should be a valid mileage" label="Mileage field" >
                <f:validateDoubleRange/>
            </h:inputText>
            <rich:message id="madeMsg" for="mage" />
            <h:outputText value="VIN" />
            <h:inputText value="#{carsBean.editedCar.vin}" id="vin"
                required="true" validatorMessage="Not a valid 17-digit VIN"
                converterMessage="Not a valid 17-digit VIN"
                requiredMessage="VIN is required">
                <f:validateLength minimum="17" maximum="17" />
            </h:inputText>
            <rich:message id="vinMsg" for="vin" />
        </h:panelGrid>
        <a4j:commandButton value="Store" action="#{carsBean.store}"
            render="table" execute="editPane"
            oncomplete="if (#{facesContext.maximumSeverity==null}) {#{rich:component('editPane')}.hide();}" />
        <a4j:commandButton value="Cancel"
            onclick="#{rich:component('editPane')}.hide(); return false;" />
</rich:popupPanel>
</h:form>
2 голосов
/ 11 августа 2010

Я использую Richfaces 3.3.3.Final с Myfaces 2.0.1 без проблем.

Убедитесь, что вы добавили facelets-1.1.15.B1 И следующие контекстные параметры в web.xml

<context-param>
    <param-name>org.ajax4jsf.VIEW_HANDLERS</param-name>
    <param-value>com.sun.facelets.FaceletViewHandler</param-value>
</context-param>
<context-param>
    <param-name>javax.faces.DISABLE_FACELET_JSF_VIEWHANDLER</param-name>
    <param-value>true</param-value>
</context-param>

и попробуйте следующий модифицированный фрагмент

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:a4j="http://richfaces.org/a4j"
    xmlns:rich="http://richfaces.org/rich"
    xmlns:f="http://java.sun.com/jsf/core">
<head>
    <title>Facelet Title</title>
</head>
<body>
    <a4j:form>
        <rich:panel header="This is the title" style="width:400px;">
            <h:outputText value="Enter your name:"/>
            <h:inputText value="#{MyBean.message}">
                <f:validateLength minimum="1" maximum="20"/>
            </h:inputText>
        </rich:panel>
    </a4j:form>
</body>
</html>

Возникла проблема с f:view, она была объявлена ​​после тела, но закрыта до </a4j:form>

1 голос
/ 22 января 2011

Я вижу, вы добавили jars richfaces-impl и richfaces-impl-jsf2. В соответствии с рекомендацией, вы должны добавить последний, только если вы используете JSF 2.0.

1 голос
/ 10 августа 2010

Вы используете RichFaces 3.x? У меня недавно была такая же проблема (хотя в моем случае я не мог использовать кнопку JSF2.0 h:), и мой товарищ по команде подумал, что это что-то с технологией, и мы просто должны ждать RichFaces 4.0 (если вы не решите это и очень хочу, я могу попросить его завтра за ссылку, если он еще есть).

...