في المرحلة التي تدار فول شيدت التي منشئ يستخدم

StackOverflow https://stackoverflow.com//questions/20035681

  •  21-12-2019
  •  | 
  •  

سؤال

النظر في المثال JSF على شبكة الإنترنت التطبيق hello1 من البرنامج التعليمي الرسمي مع إضافة منشئ في إدارتها الفول.متابعة index.xhtml facelet

<html lang="en"
      xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html">
    <h:head>
        <title>Facelets Hello Greeting</title>
    </h:head>
    <h:body>
        <h:form>
            <h:graphicImage url="#{resource['images:duke.waving.gif']}" 
                            alt="Duke waving his hand"/>
            <h2>Hello hui, my name is Duke. What's yours?</h2>
            <h:inputText id="username"
                         title="My name is: "
                         value="#{hello.name}"
                         required="true"
                         requiredMessage="Error: A name is required."
                         maxlength="25" />
            <p></p>
            <h:commandButton id="submit" value="Submit" action="response">
            </h:commandButton>
            <h:commandButton id="reset" value="Reset" type="reset">
            </h:commandButton>
        </h:form>
        <div class="messagecolor">
            <h:messages showSummary="true" 
                        showDetail="false"
                        errorStyle="color: #d20005" 
                        infoStyle="color: blue"/>
        </div>
    </h:body>
</html>

و modidfied تمكنت الفول Hello.java

package javaeetutorial.hello1;


import javax.enterprise.context.RequestScoped;
import javax.inject.Named;

@Named
@RequestScoped
public class Hello {

    private String name;

    public Hello() {
    }
    public Hello(String name){
        this.name=name;
    }

    public String getName() {
        return name;
    }

    public void setName(String user_name) {
        this.name = user_name;
    }
}

هناك اثنين العامة والمنشئات.دعونا ننشر هذا التطبيق على الخادم وأرسل الطلب المبدئي اكتب الاسم في inputText ثم انقر فوق submit.هناك طلب إعادة النشر بعد submit انقر فوق.ومن ثم كما هو مكتوب في tutroial ، لدينا ما يلي subphase من تنفيذ المرحلة:

  1. عرض التطبيق هو بناؤها أو ترميمها.
  2. طلب قيم المعلمة يتم تطبيقها.
  3. التحويلات والتصديقات يتم تنفيذ مكون القيم.
  4. تمكنت الفاصوليا مع تحديث مكون القيم.
  5. تطبيق المنطق هو الاحتجاج.

في المرحلة الابتدائية من تمكن فول سيتم إنشاؤها ؟

ما منشئ سيتم استدعاؤه لهذا المثيل الخلق لماذا ؟ أنا لا أفهم كيف يمكن أن تكون مراقبة من index.xhtml التعليمات البرمجية.

هل كانت مفيدة؟

المحلول

في المرحلة الابتدائية من تمكن فول سيتم إنشاؤها ؟

لا أحد على وجه التحديد.انها شيدت لأول مرة عندما التعسفي ش التعبير يحتاج إلى مرجع تمكنت فول للمرة الأولى في حين الفول سبيل المثال ليست موجودة في نطاقه.هذا لا يعتمد على أي الوجوه الحدث.هذا يمكن أن يكون من خلال استعادة عرض المرحلة (المرحلة الأولى), ولكن هذا يمكن أيضا أن تكون جيدة خلال تقديم استجابة المرحلة (المرحلة الأخيرة) ، أو أي مرحلة أخرى في بين.

كل هذا يعتمد على كيف وأين الفول المشار إليها في EL السياق عبر #{bean.xxx} في رأي (أو برمجيا في النموذج).يجب عليك عموما لا تقلق بشأن هذا.JSF (على وجه التحديد ش) على الأقل سوف لا بناء عليه في وقت أقرب مما هو ضروري من أجل أن نبني بشكل صحيح أو عملية أو تقديم عرض.


ما منشئ سيتم استدعاؤه لهذا المثيل الخلق لماذا ؟

منشئ افتراضي بالطبع.لأن Javabeans مواصفات يقول ذلك.جميع المنشئات هي لم تستخدم قط من قبل JSF/CDI تمكنت فول المرفق.

حتى ذلك الحين, يجب أن لا تكون مثيرة للقلق حول المنشئات.من الأفضل إجراء التهيئة في @PostConstruct مشروح الطريقة بدلا من منشئ.وهي عندما الفول تدار من قبل فول الإطار الإداري الذي يستخدم بروكسيات مثل CDI, منشئ افتراضي يمكن أن يسمى في كثير من الأحيان من المطلوب.


أنا لا أفهم كيف يمكن أن تكون مراقبة من الفهرس.رمز xhtml.

فقط ضع نقطة توقف في منشئ ، @PostConstruct, أو أيا ذات الصلة جالبة/اضع طريقة تشغيل المشروع في وضع التصحيح.بمجرد توقف يضرب فحص مكدس الاستدعاءات.تشارك الفئات وأساليب عموما بدلا الذاتي توثيق أسماء.هنا مثال على كيف مكدس الاستدعاءات يمكن أن تبدو وكأنها عندما كنت تستخدم @Named:

Daemon Thread [http-bio-8088-exec-6] (Suspended (entry into method <init> in TestBean)) 
    owns: LocalCache$StrongEntry  (id=503)  
    owns: SocketWrapper  (id=504)   
    TestBean$Proxy$_$$_WeldClientProxy.<init>() line: not available [local variables unavailable]   
    NativeConstructorAccessorImpl.newInstance0(Constructor, Object[]) line: not available [native method]   
    NativeConstructorAccessorImpl.newInstance(Object[]) line: 57    
    DelegatingConstructorAccessorImpl.newInstance(Object[]) line: 45    
    Constructor.newInstance(Object...) line: 526    
    Class.newInstance() line: 374   
    NewInstanceAction.run() line: 33    
    AccessController.doPrivileged(PrivilegedExceptionAction<T>) line: not available [native method] 
    ClientProxyFactory(ProxyFactory).create(BeanInstance) line: 271 
    ClientProxyFactory.create(BeanInstance) line: 111   
    ClientProxyProvider.createClientProxy(Bean<T>, Set<Type>) line: 181 
    ClientProxyProvider.createClientProxy(Bean<T>) line: 171    
    ClientProxyProvider.access$100(ClientProxyProvider, Bean) line: 45  
    ClientProxyProvider$CreateClientProxy.load(Bean<Object>) line: 56   
    ClientProxyProvider$CreateClientProxy.load(Object) line: 52 
    LocalCache$LoadingValueReference.loadFuture(K, CacheLoader<? super K,V>) line: 3589 
    LocalCache$Segment.loadSync(K, int, LoadingValueReference<K,V>, CacheLoader<? super K,V>) line: 2374    
    LocalCache$Segment.lockedGetOrLoad(K, int, CacheLoader<? super K,V>) line: 2337 
    LocalCache$Segment.get(K, int, CacheLoader<? super K,V>) line: 2252 
    LocalCache.get(K, CacheLoader<? super K,V>) line: 3990  
    LocalCache.getOrLoad(K) line: 3994  
    LocalCache$LocalLoadingCache.get(K) line: 4878  
    LoadingCacheUtils.getCacheValue(LoadingCache<K,V>, K) line: 52  
    LoadingCacheUtils.getCastCacheValue(LoadingCache<K,V>, Object) line: 80 
    ClientProxyProvider.getClientProxy(Bean<T>) line: 187   
    WeldELResolver(AbstractWeldELResolver).lookup(BeanManagerImpl, ELContext, String) line: 110 
    WeldELResolver(AbstractWeldELResolver).getValue(ELContext, Object, Object) line: 91 
    WeldApplication$LazyBeanManagerIntegrationELResolver(ForwardingELResolver).getValue(ELContext, Object, Object) line: 49 
    CompositeELResolver.getValue(ELContext, Object, Object) line: 67    
    DemuxCompositeELResolver._getValue(int, ELResolver[], ELContext, Object, Object) line: 176  
    DemuxCompositeELResolver.getValue(ELContext, Object, Object) line: 203  
    AstIdentifier.getValue(EvaluationContext) line: 72  
    ValueExpressionImpl.getValue(ELContext) line: 185   
    WeldValueExpression.getValue(ELContext) line: 50    
    ELText$ELTextVariable.writeText(ResponseWriter, ELContext) line: 227    
    ELText$ELTextComposite.writeText(ResponseWriter, ELContext) line: 150   
    TextInstruction.write(FacesContext) line: 85    
    UIInstructions.encodeBegin(FacesContext) line: 82   
    UIInstructions(UILeaf).encodeAll(FacesContext) line: 207    
    HtmlBody(UIComponent).encodeAll(FacesContext) line: 1899    
    UIViewRoot(UIComponent).encodeAll(FacesContext) line: 1899  
    FaceletViewHandlingStrategy.renderView(FacesContext, UIViewRoot) line: 451  
    MultiViewHandler.renderView(FacesContext, UIViewRoot) line: 131 
    ConversationAwareViewHandler(ViewHandlerWrapper).renderView(FacesContext, UIViewRoot) line: 337 
    RenderResponsePhase.execute(FacesContext) line: 120 
    RenderResponsePhase(Phase).doPhase(FacesContext, Lifecycle, ListIterator<PhaseListener>) line: 101  
    LifecycleImpl.render(FacesContext) line: 219    
    FacesServlet.service(ServletRequest, ServletResponse) line: 647 
    ...

تبدأ في الجزء السفلي (لقد جردت جميع الخطوط بعد FacesServlet.service وتلك هي عموما غير ذي صلة) و تقرأ من أسفل إلى أعلى.على RenderResponsePhase.execute يقول أنه أعدم خلال تقديم استجابة المرحلة.على TextInstruction.write يقول أنه وقع خلال كتابة نتائج ش في قالب النص مثل ذلك <p>#{bean.something}</p>.ما تبقى هو فقط كيف CDI تنفيذ اللحام هو إيجاد إنشاء الوكيل و كيف هو بدوره إنشاء الفعلية فول المرجعية.

إذا حدث ذلك أثناء مرحلة مختلفة ، كنت بدلا من RenderResponsePhase.execute رأينا على سبيل المثال UpdateModelValuesPhase.execute وهلم جرا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top