2012-05-21 16 views
8

ajax ben basit Facelet etiketine sahip: Birden c:set etiketlerini ilan önlemek için kullanılırFacelet etiket parametresi:

<ui:composition> 
    <ui:insert /> 
</ui:composition> 

.
ı adıyla view ile Taglib kütüphane facelets bunu tescil diyelim ve bu gibi kullanmak:

Target Unreachable, identifier 'bean' resolved to null 
javax.el.PropertyNotFoundException: Target Unreachable, identifier 'bean' resolved to null 
    at com.sun.el.parser.AstValue.getTarget(AstValue.java:153) 
    at com.sun.el.parser.AstValue.invoke(AstValue.java:237) 
    at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:302) 
    at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:39) 
    at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50) 
    at org.primefaces.component.behavior.ajax.AjaxBehaviorListenerImpl.processAjaxBehavior(AjaxBehaviorListenerImpl.java:47) 
:

<my:view bean="#{myController}"> 
    <p:inputText value="#{bean.value}> 
    <p:ajax event="blur" process="@this" listener="#{bean.handleValueChanged}" /> 
    </p:inputText> 
</my:view> 
nitelik value mükemmel p:inputText çözülmektedir

ancak p:ajax bu atar

Hata mı, yoksa beklenen bir davranış mı?

Güncelleştirme: Sadece aynısını f: ajax ile denedim ve işe yaradı! aşağıdaki gibi

BTW, ortam:
GlassFish 3.1.2
PF 3.0, 3.2, 3.3

Update2: RichFaces ile
This sorunu tamamen aynıdır. Bir PrimeFaces hatası gibi görünüyor (Bugün PF hata izleyicisinde bir sorun yayınlayacağım).

+0

araştırma için 1 ... – Addicted

+1

içine yeniden gerektiğini düşünüyorum, ben PF hata izci konuyu açtı: http://code.google .com/p/primefaces/issues/detail? id = 4075 – jFrenetic

cevap

4

Meslektaşım bu sorunu çözmek için yeni bir yama sağladı. aşağıdaki gibi

AjaxBehaviorListenerImpl#processAjaxBehaviour mevcut uygulamasıdır:

public void processAjaxBehavior(AjaxBehaviorEvent event) throws AbortProcessingException { 
     FacesContext context = FacesContext.getCurrentInstance(); 
     final ELContext elContext = context.getELContext(); 

     try{ 
      listener.invoke(elContext, new Object[]{}); 
     } catch (MethodNotFoundException mnfe) { 
      MethodExpression argListener = context.getApplication().getExpressionFactory(). 
         createMethodExpression(elContext, listener.getExpressionString(), null, new Class[]{event.getClass()}); 

      argListener.invoke(elContext, new Object[]{event}); 
     } 
    } 

O, bu gibi çimdik önermektedir:

import javax.faces.view.facelets.FaceletContext; 

public void processAjaxBehavior(AjaxBehaviorEvent event) throws AbortProcessingException { 
     FacesContext context = FacesContext.getCurrentInstance(); 
     final ELContext elContext = context.getELContext(); 

     try{ 
      listener.invoke(elContext, new Object[]{}); 
     } catch (MethodNotFoundException mnfe) { 
      FaceletContext fc = (FaceletContext) context.getAttributes().get(FaceletContext.FACELET_CONTEXT_KEY); 
      MethodExpression argListener = context.getApplication().getExpressionFactory(). 
         createMethodExpression(fc, listener.getExpressionString(), null, new Class[]{ event.getClass() }); 

      argListener.invoke(elContext, new Object[]{ event }); 
     } 
    } 

Umarım bu PF ekibi tarafından onaylanacaktır.

+0

Güzel iş! Bu, bir etiket dosyasında '' kullanırken sahip olduğumuz bir problemi teorik olarak çözebilir. – BalusC

+0

@BalusC Teşekkürler! Yine de, tüm kudoslar meslektaşımma gitmeli (O'nun hesabı varsa şüpheliyim). Sadece problemi fark ettim ve o çözdü :) ' jFrenetic

+0

Hayır, bu benim işim için bir '' p: ajax event = 'rowEdit "dinleyicisi =" # {bean.save} ile birlikte bir '' içeren bir etiket dosyası hazırladık. ">' böylelikle tek bir etiket olarak 'veri tablosuna dahil edilebilir. Ancak" "hiçbir zaman dinleyici yöntemini çağırmamıştır. – BalusC

-1

Tweak, tek bir kullanıcı arabiriminden daha karmaşık olan kullanım durumumla çalışmaz: içerir.

<c:forEach items="#{items}" var="item"> 
      <ui:include src="#{item.uri}"> 
       <ui:param name="itemBean" value="#{item.bean}"/> 
      </ui:include> 

</c:forEach> 

ben dinleyicinin değişken mapper Söz verdiğimiz gibi yeni MethodExpression

+0

yorumlarda belirtin veya başka bir soru sorun lütfen. SO bir forum değil. –

+0

Sadece yapamam, yeterli itibar ve yeni bir soru sormak bir çözüm değil. Bu arada, http://code.google.com/p/primefaces/issues/detail?id=4075 (nithril olarak) olarak kabul edilen ve –

+0

itibar sınırlaması için özür dileyen bu konuya bir yama ekledim. Bu sorun hala devam ediyor, bu sorundan sonra sorunlarınız ortadan kalktı mı? –