2012-04-29 6 views
0

я должен написать составной компонент, который показывает форму входа и может быть использован с в следующем фрагменте кода:Внутренний компонент не найден, когда retargetMethodExpressions

<login:loginForm username="#{loginBean.username}" 
       password="#{loginBean.password}" 
       action="#{loginBean.login}"/> 

Мой loginBean только простой сериализации @ViewScoped@ManagedBean с добытчиками, сеттеры и метод public String login().

Это мой составной компонент:

<body> 
    <cc:interface> 
     <cc:attribute name="username" required="true" type="java.lang.String" /> 
     <cc:attribute name="password" required="true" type="java.lang.String" /> 
     <cc:attribute name="action" targets="submit" required="true" method-signature="java.lang.String f()"/> 
    </cc:interface> 

    <cc:implementation> 
     <h3><span xml:lang="en">Login</span> Daten </h3> 
     <h:form> 
      <div class="formblock"> 
       <fieldset> 
        <div> 
         <h:outputLabel value="Username" for="username"/> 
         <h:inputText id="username" value="#{cc.attrs.username}"/> 
        </div> 

        <div> 
         <h:outputLabel value="Passwort" for="password"/> 
         <h:inputSecret id="password" value="#{cc.attrs.password}"/> 
        </div> 
       </fieldset> 
      </div> 
      <div class="buttons"> 
       <h:commandButton id="submit" value="Anmelden" accesskey="r" /> 
      </div> 
     </h:form> 
    </cc:implementation> 
</body> 

Но, когда я открываю страницу login.xhtml (которая содержит login:loginForm -snippet) в браузере, можно увидеть следующую ошибку в журнале молы:

Apr 29, 2012 11:59:49 PM org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage retargetMethodExpressions 
SEVERE: Inner component submit not found when retargetMethodExpress 

Но что это значит? Где ошибка в моем коде? Я уже пробовал некоторые другие решения для реализации атрибута action, но безуспешно.

+0

Только что увидел, что я использовал версию myfaces версии 2.0.4 вместо текущей версии 2.1.7. Итак, обновлен, и теперь ошибка исчезла. Но действие при этом не выполняется при нажатии кнопки команды. –

ответ

1

Хорошо. После обновления до версии MyFaces 2.1.7 с прямыми вперед решение без target -stuff работает:

<body> 
    <cc:interface> 
     <cc:attribute name="username" required="true" type="java.lang.String" /> 
     <cc:attribute name="password" required="true" type="java.lang.String" /> 
     <cc:attribute name="action" required="true" method-signature="java.lang.String f()"/> 
    </cc:interface> 

    <cc:implementation> 
     <h3><span xml:lang="en">Login</span> Daten </h3> 
     <h:form> 
      <div class="formblock"> 
       <fieldset> 
        <div> 
         <h:outputLabel value="Username" for="username"/> 
         <h:inputText id="username" value="#{cc.attrs.username}"/> 
        </div> 

        <div> 
         <h:outputLabel value="Passwort" for="password"/> 
         <h:inputSecret id="password" value="#{cc.attrs.password}"/> 
        </div> 
       </fieldset> 
      </div> 
      <div class="buttons"> 
       <h:commandButton action="#{cc.attrs.action}" value="Anmelden" accesskey="r" /> 
      </div> 
     </h:form> 
    </cc:implementation> 
</body> 
0

Цель = «представить» является неправильным, так как ч: форма NamingContainer, поэтому вам нужно назначить и идентификатор к этому компоненту и изменить цель на «myForm: submit» или что-то в этом роде.

+0

Вы имеете в виду, что я должен заменить 'target =" submit "' with 'target =" myForm: submit "' и '' с '', и тогда это должно сработать? –