في المرحلة التي تدار فول شيدت التي منشئ يستخدم
-
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 من تنفيذ المرحلة:
- عرض التطبيق هو بناؤها أو ترميمها.
- طلب قيم المعلمة يتم تطبيقها.
- التحويلات والتصديقات يتم تنفيذ مكون القيم.
- تمكنت الفاصوليا مع تحديث مكون القيم.
- تطبيق المنطق هو الاحتجاج.
في المرحلة الابتدائية من تمكن فول سيتم إنشاؤها ؟
ما منشئ سيتم استدعاؤه لهذا المثيل الخلق لماذا ؟ أنا لا أفهم كيف يمكن أن تكون مراقبة من 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
وهلم جرا.