2013-12-18 20 views
0

我有一个通常必须执行removeArticle函数的通过ajax提交的表单。问题是当我点击按钮时,函数永远不会被调用,并返回一个美丽的错误消息(显示警告)告诉我:“serverError:class javax.ejb.NoSuchEJBException CORBA OBJECT_NOT_EXIST 9998可能;嵌套的异常是:org .omg.CORBA.OBJECT_NOT_EXIST:vmcid:0x2000次要代码:1806已完成:也许“。我在另一部分中使用了类似(几乎)添加鸡尾酒的形式。当我把我的removeArticle调用转化成其执行该其他形式的...为什么我的JSF commandButton没有执行并返回一个错误?

我的代码如下:

<?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"> 
<ui:composition template="template/common/commonLayout.xhtml" 
      xmlns="http://www.w3.org/1999/xhtml" 
      xmlns:ui="http://java.sun.com/jsf/facelets" 
      xmlns:component="http://java.sun.com/jsf/composite/component" 
      xmlns:h="http://java.sun.com/jsf/html" 
      xmlns:c="http://java.sun.com/jsp/jstl/core" 
      xmlns:f="http://java.sun.com/jsf/core"> 
<ui:define name="title">Panier</ui:define> 
<ui:define name="content"> 
    <c:if test="#{dataManagedBean.cartLength > 0}"> 
      <div id="cart-component"> 
       <h2>Panier</h2> 
       <div class="well well-small"> 
        <ul class="thumbnails"> 
         <ui:repeat value = "#{dataManagedBean.cartContent}" var = "item" varStatus="status"> 
          <h:form id="cocktail-panier"> 
          <div class="media"> 
           <div class="pull-left media-object span2"> 
            <div class="text-center"> 
             <img src="resources/img/#{item.photoURIName}.#{item.photoURIExt}" 
              alt="Photo du cocktail #{item.name}"/> 
            </div> 
           </div> 
           <div class="media-body"> 
            <h3 class="media-heading"> 
             #{item.name} 
            </h3> 
            <div class="well well-small"> 
             <ul class="thumbnails"> 
              <ui:repeat value="#{dataManagedBean.getCocktailBeverages(dataManagedBean.getCocktailFull(item))}" var="bev" varStatus="status1"> 
               <component:ShowBeverageComponent item="#{bev}"/> 
              </ui:repeat> 
              <div class = "span2 right">Quantité : #{dataManagedBean.getQuantityForCocktailInCart(item)}</div><br /> 
              <div class = "span2 right">Prix unitaire : #{item.price} €</div><br /> 
              <div class = "span2 right">Prix total : #{item.price * dataManagedBean.getQuantityForCocktailInCart(item)} €</div> 
             </ul>     
             <h:commandButton 
              title="" 
              value="Supprimer les articles " 
              type="button" 
              actionListener="#{dataManagedBean.removeArticle(item)}"> 
              <f:ajax execute="@form" render="@all" /> 
             </h:commandButton> 
             <h:inputText id="qty" maxlength="3" value="#{dataManagedBean.qty}" styleClass="input-mini" /> 

            </div> 
           </div> 
          </div> 
          </h:form> 
         </ui:repeat> 
        </ul> 
       </div> 
      </div> 
    </c:if> 
    <li class="thumbnail"> 
     <div class="totalPanier"> 
      <div class="total-cart"> Total: #{dataManagedBean.getCartPrice()}€</div> 
      <h:button class="totalPanier-button" 
         image="#{resource['img:btn_valider.png']}" 
         alt="valider" outcome="Form.xhtml" rendered="#{dataManagedBean.cartLength > 0}"> 
      </h:button> 
      <div class="clear"></div> 
     </div> 
    </li> 
</ui:define> 
</ui:composition>` 
+0

接受您的回答 –

回答

0

问题是嵌套的UI:重复!我取代了我的2 ui:重复2 c:forEach,一切正常!

1

HTML元素的ID不应该有“ - ”就像你:<h:form id="cocktail-panier"><div id="cart-component">,这导致js中的问题。用下划线cart_component取代所有这些ID,或使用Java风格像cartComponent

使用的commandButton这样的:

<h:commandButton 
       title="" 
       value="Supprimer les articles " 
       type="button"> 
       <f:ajax execute="@form" render="@all" listener="#{dataManagedBean.removeArticle(item)}"/> 
</h:commandButton> 

Ajax的监听方法:

public final void removeArticle(final YourItemClass item){ 

您使用JSTL组件。 JSTL将在构建时运行,如果你的Bean是requestScoped,那么commandbutton的render/action不会触发。

改变你的bean(如果不)ViewScope或SessionScope,并使用渲染,而不是<c:if...

财产以后这样的:

替换此<c:if test="#{dataManagedBean.cartLength > 0}">

宽度这样的:

<h:panelGroup display="block" rendered="#{dataManagedBean.cartLength > 0}"> 
..... 

ADDITIONALY: 您使用模板。你的模板应财产以后这样的:

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:f="http://java.sun.com/jsf/core" 
     xmlns:h="http://java.sun.com/jsf/html" 
     xmlns:ui="http://java.sun.com/jsf/facelets" 
     > 
<h:head> 
    <meta charset="UTF-8" /> 
    <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> 
    <h:outputStylesheet name="stylesheet.css"/> 

    <title>${pageTitle}</title> 

在你使用这个模板您的XHTML页面,你并不需要声明XML或HTML DOCTYPE,并直接使用你的模板:

<ui:composition template="template/common/commonLayout.xhtml" 
.... 

使用<h:head>而不是<head>,否则JSF将不包含文档中的jsf.js

+0

感谢您提供了很多建议,但即使如此,我也收到了错误... – Ko2r

相关问题