Comments (19)
Reported by @edburns
from javaserverfaces-spec.
@edburns said:
up to p2 feature
from javaserverfaces-spec.
@edburns said:
https://javaserverfaces.dev.java.net/issues/show_bug.cgi?id=39
Add to <f:view> some useful listeners. F.g. for preparing backin bean on this
page (init event), for releasing resorces after response was generated (finalize
event) etc.
There are some threads on forum about this problem for instance:
http://forum.java.sun.com/thread.jsp?forum=427&thread=541382
from javaserverfaces-spec.
rogerk said:
Taking ownership.
from javaserverfaces-spec.
@edburns said:
Take ownership
from javaserverfaces-spec.
@edburns said:
Issue: 8-ViewLifecycle phase II, the JSP layer
This change-bundle adds the jsp layer to the implementation of
8-ViewLifecycle.
A systest/src/com/sun/faces/jsptest/ViewRootPhaseListenerTestCase.java
A systest/src/com/sun/faces/systest/model/PrintEventToRequestMapPhaseListener.java
A systest/web/listenerTagListenersBinding.jsp
A systest/web/listenerTagListenersBindingType.jsp
A systest/web/listenerTagListenersType.jsp
A systest/web/viewTagListeners.jsp
- new testcase that exercises all the ways phaseListeners can be added
to a UIViewRoot from JSP.
M systest/web/WEB-INF/faces-config.xml
- bean for testcase
A src/com/sun/faces/taglib/jsf_core/PhaseListenerTag.java
-
Tag implementation that creates a {@link PhaseListener}
instance
-
and registers it on the {@link UIViewRoot} associated with our most
- immediate surrounding instance of a tag whose component
- is an instance of {@link UIViewRoot}
. This tag creates no output to the
-
page currently being created.
M conf/share/jsf_core.tld
-
add phaseListener tag
-
add beforePhase and afterPhase attributes to viewTag
M src/com/sun/faces/taglib/jsf_core/ViewTag.java
-
add beforePhase and afterPhase String setters.
-
add supporting code to setProperties()
Index: conf/share/jsf_core.tld
RCS file: /cvs/javaserverfaces-sources/jsf-ri/conf/share/jsf_core.tld,v
retrieving revision 1.45
diff -u -r1.45 jsf_core.tld
— conf/share/jsf_core.tld 2 Dec 2004 18:42:22 -0000 1.45
+++ conf/share/jsf_core.tld 7 Dec 2004 22:41:57 -0000
@@ -522,6 +522,38 @@
- phaseListener
- com.sun.faces.taglib.jsf_core.PhaseListenerTag
- com.sun.faces.taglib.FacesTagExtraInfo
- empty
- Register a PhaseListener instance on the UIViewRoot in which
- this tag is nested.
- type
- false
- false
- Fully qualified Java class name of an PhaseListener to be
- created and registered.
- binding
- false
- false
- Value binding expression that evaluates to an object that
- implements javax.faces.event.PhaseListener.
@@ -951,6 +983,30 @@
Locale to use for localizing this page. Expressions
must evaluate to a java.util.Locale or to a String
that is converted to a Locale.
- beforePhase
- false
- false
- MethodBinding pointing to a method that takes a
- javax.faces.event.PhaseEvent and returns void. This method
- will be called before every phase except for restore view.
- afterPhase
- false
- false
- MethodBinding pointing to a method that takes a
- javax.faces.event.PhaseEvent and returns void. This method
- will be called after every phase except for restore view.
Index: src/com/sun/faces/taglib/jsf_core/ViewTag.java
RCS file:
/cvs/javaserverfaces-sources/jsf-ri/src/com/sun/faces/taglib/jsf_core/ViewTag.java,v
retrieving revision 1.28
diff -u -r1.28 ViewTag.java
— src/com/sun/faces/taglib/jsf_core/ViewTag.java 23 Nov 2004 19:26:53 -0000 1.28
+++ src/com/sun/faces/taglib/jsf_core/ViewTag.java 7 Dec 2004 22:41:58 -0000
@@ -22,6 +22,8 @@
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
import javax.faces.el.ValueBinding;
+import javax.faces.el.MethodBinding;
+import javax.faces.event.PhaseEvent;
import javax.faces.webapp.UIComponentBodyTag;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
@@ -68,6 +70,19 @@
locale = newLocale;
}
- protected String beforePhase = null;
- public void setBeforePhase(String newBeforePhase)
{ + beforePhase = newBeforePhase; + }
- protected String afterPhase = null;
- public void setAfterPhase(String newAfterPhase)
{ + afterPhase = newAfterPhase; + }
// Relationship Instance Variables
//
@@ -258,10 +273,12 @@
super.setProperties(component);
Locale viewLocale = null;
ValueBinding vb = null;
- MethodBinding mb = null;
- UIViewRoot viewRoot = (UIViewRoot) component;
if (null != locale) {
if (isValueReference(locale)) {
-
component.setValueBinding("locale",
-
vb = Util.getValueBinding(locale));
- viewRoot.setValueBinding("locale",
- vb = Util.getValueBinding(locale));
Object resultLocale =
vb.getValue(FacesContext.getCurrentInstance());
if (resultLocale instanceof Locale) { @@ -272,7 +289,7 @@ }
else
{ viewLocale = getLocaleFromString(locale); }
-
((UIViewRoot) component).setLocale(viewLocale);
- viewRoot.setLocale(viewLocale);
// update the JSTL locale attribute in request scope so that
// JSTL picks up the locale from viewRoot. This attribute
// must be updated before the JSTL setBundle tag is called
@@ -280,7 +297,28 @@
// is created based on the locale.
Config.set(pageContext.getRequest(),Config.FMT_LOCALE, viewLocale);
}
- if (null != beforePhase) {
- if (isValueReference(beforePhase))Unknown macro: {+ Class args[] = { PhaseEvent.class };
- mb =
FacesContext.getCurrentInstance().getApplication().createMethodBinding(beforePhase,
args); - viewRoot.setBeforePhaseListener(mb);
- } else {
- Object params [] = {beforePhase};
- throw new
javax.faces.FacesException(Util.getExceptionMessageString(Util.INVALID_EXPRESSION_ID,
params)); - }
- }
- if (null != afterPhase) {
- if (isValueReference(afterPhase)) {
- Class args[] = { PhaseEvent.class };+ mb =FacesContext.getCurrentInstance().getApplication().createMethodBinding(afterPhase,args);+ viewRoot.setAfterPhaseListener(mb);+ + }
else
Unknown macro: {+ Object params [] = {afterPhase};+ throw newjavax.faces.FacesException(Util.getExceptionMessageString(Util.INVALID_EXPRESSION_ID,params));+ }
- }
}
- viewRoot.setLocale(viewLocale);
Index: systest/web/WEB-INF/faces-config.xml
RCS file: /cvs/javaserverfaces-sources/jsf-ri/systest/web/WEB-INF/faces-config.xml,v
retrieving revision 1.35
diff -u -r1.35 faces-config.xml
— systest/web/WEB-INF/faces-config.xml 2 Dec 2004 18:42:28 -0000 1.35
+++ systest/web/WEB-INF/faces-config.xml 7 Dec 2004 22:41:59 -0000
@@ -134,6 +134,17 @@
session
- phaseListener
- com.sun.faces.systest.model.PrintEventToRequestMapPhaseListener
- request
- phaseIdString
- ANY_PHASE
from javaserverfaces-spec.
@edburns said:
Created an attachment (id=6)
new classes for recently attached change-bundle
from javaserverfaces-spec.
rogerk said:
r=rogerk
from javaserverfaces-spec.
@edburns said:
fixed in EDR
from javaserverfaces-spec.
@edburns said:
While working on an updated demo, I found a small bug with this issue.
We need to specify that the responseComplete or renderResponse flags must be
checked after each listener invocation to ensure that the proper skipping takes
place. Without doing this, it's not possible to write a phaseListener that, for
example, listens for the beforeRender event and skips rendering.
from javaserverfaces-spec.
@edburns said:
[8-UIViewRootPhaseListener] check for skipping
This change-bundle changes the spec and implements the change.
SECTION: jsf-api changes
M src/javax/faces/component/UIViewRoot.java
- specify that the responseComplete and renderResponse flags must be
checked after each listener, as they are for the regular lifecycle
phase listeners. If either are set, don't do the normal processing,
but do call the phase listeners.
M test/javax/faces/component/UIViewRootTestCase.java
- exercise new code
SECTION: jsf-api diffs
Index: src/javax/faces/component/UIViewRoot.java
RCS file:
/cvs/javaserverfaces-sources/jsf-api/src/javax/faces/component/UIViewRoot.java,v
retrieving revision 1.33
diff -u -r1.33 UIViewRoot.java
— src/javax/faces/component/UIViewRoot.java 18 Mar 2005 14:52:07 -0000 1.33
+++ src/javax/faces/component/UIViewRoot.java 12 Apr 2005 21:39:24 -0000
@@ -60,17 +60,31 @@
*
-
-
*
+ *
-
If {@link #getBeforePhaseListener}
returns non-
null
, -
invoke the listener, passing in the correct corresponding {@link * PhaseId}
for this phase.
*-
-
Upon return from the listener, call
-
{@link + * FacesContext#getResponseComplete} and {@link + * FacesContext#getRenderResponse}. If either return
true
-
- set the internal state flag to
true
.
- set the internal state flag to
-
-
If or one or more listeners have been added by a call to {@link * #addPhaseListener}, invoke the
beforePhase
method on - each one whose {@link PhaseListener#getPhaseId} matches the current
- phaseId, passing in the same
PhaseId
as in the previous - step.
-
-
Execute any processing for this phase.
-
-
-
Upon return from each listener, call {@link + * FacesContext#getResponseComplete}
-
and
{@link + * FacesContext#getRenderResponse}
. If either return
true
-
- set the internal state flag to
true
.
- set the internal state flag to
-
-
-
-
Execute any processing for this phase if the internal state flag
-
-
- was not set.
-
-
If {@link #getAfterPhaseListener}
returns non-
null
, -
invoke the listener, passing in the correct corresponding {@link
@@ -130,6 +144,14 @@
Initialize a state flag to
+ *false
.private int lastId = 0;
- /**
-
-
Set and cleared during the lifetime of a lifecycle phase. Has
-
-
- no meaning between phases. If
true
, the lifecycle
- no meaning between phases. If
-
- processing for the current phase must not take place.
- */
- private boolean skipPhase;
// -------------------------------------------------------------- Properties
@@ -437,13 +459,16 @@
-
is
null
*/
public void processDecodes(FacesContext context) {- skipPhase = false;
// avoid creating the PhaseEvent if possible by doing redundant
// null checks.
if (null != beforePhase || null != phaseListeners) { notifyPhaseListeners(context, PhaseId.APPLY_REQUEST_VALUES, true); }
- skipPhase = false;
-
super.processDecodes(context);
-
broadcastEvents(context, PhaseId.APPLY_REQUEST_VALUES);
- if (!skipPhase) { + super.processDecodes(context); + broadcastEvents(context, PhaseId.APPLY_REQUEST_VALUES); + }
// clear out the events if we're skipping to render-response
// or if there is a response complete signal.
if (context.getRenderResponse() || context.getResponseComplete()) {
@@ -484,13 +509,16 @@
public void encodeBegin(FacesContext context) throws IOException {
lastId = 0;
- skipPhase = false;
// avoid creating the PhaseEvent if possible by doing redundant
// null checks.
if (null != beforePhase || null != phaseListeners)
{ notifyPhaseListeners(context, PhaseId.RENDER_RESPONSE, true); }
-
super.encodeBegin(context);
+- if (!skipPhase) { + super.encodeBegin(context); + }
}
/**
@@ -535,10 +563,12 @@
(isBefore && (null != beforePhase)) ||
(!isBefore && (null != afterPhase));
MethodBinding binding = isBefore ? beforePhase : afterPhase;-
if (hasPhaseMethodBinding) {
tryUnknown macro: { binding.invoke(context, new Object [] { event });+ skipPhase = context.getResponseComplete() ||+ context.getRenderResponse(); }
catch (Exception e)
Unknown macro: { // PENDING(edburns)}
catch (Exception e) {
// PENDING(edburns): log this
@@ -598,18 +630,19 @@ -
is
null
*/
public void processValidators(FacesContext context) {- skipPhase = false;
// avoid creating the PhaseEvent if possible by doing redundant
// null checks.
if (null != beforePhase || null != phaseListeners) { notifyPhaseListeners(context, PhaseId.PROCESS_VALIDATIONS, true); }
- skipPhase = false;
-
super.processValidators(context);
-
broadcastEvents(context, PhaseId.PROCESS_VALIDATIONS);
- if (!skipPhase) { + super.processValidators(context); + broadcastEvents(context, PhaseId.PROCESS_VALIDATIONS); + }
// clear out the events if we're skipping to render-response
// or if there is a response complete signal. -
if (context.getRenderResponse() || context.getResponseComplete()) {
- if (context.getRenderResponse() || context.getResponseComplete()) {
if (events != null) {
for (int i=0; i<PhaseId.VALUES.size(); i++) {
List eventList = events[i];
@@ -642,15 +675,16 @@
- if (context.getRenderResponse() || context.getResponseComplete()) {
-
is
null
*/
public void processUpdates(FacesContext context) {- skipPhase = false;
// avoid creating the PhaseEvent if possible by doing redundant
// null checks.
if (null != beforePhase || null != phaseListeners) { notifyPhaseListeners(context, PhaseId.UPDATE_MODEL_VALUES, true); }
- skipPhase = false;
-
super.processUpdates(context);
-
broadcastEvents(context, PhaseId.UPDATE_MODEL_VALUES);
- if (!skipPhase) { + super.processUpdates(context); + broadcastEvents(context, PhaseId.UPDATE_MODEL_VALUES); + }
// clear out the events if we're skipping to render-response
// or if there is a response complete signal.
if (context.getRenderResponse() || context.getResponseComplete()) {
@@ -686,15 +720,17 @@ -
is
null
*/
public void processApplication(FacesContext context) {- skipPhase = false;
// avoid creating the PhaseEvent if possible by doing redundant
// null checks.
if (null != beforePhase || null != phaseListeners) { notifyPhaseListeners(context, PhaseId.INVOKE_APPLICATION, true); }
- skipPhase = false;
-
// NOTE - no tree walk is performed; this is a UIViewRoot-only operation
-
broadcastEvents(context, PhaseId.INVOKE_APPLICATION);
- if (!skipPhase) { + // NOTE - no tree walk is performed; this is a UIViewRoot-only operation + broadcastEvents(context, PhaseId.INVOKE_APPLICATION); + }
// clear out the events if we're skipping to render-response
// or if there is a response complete signal.
if (context.getRenderResponse() || context.getResponseComplete()) {
Index: test/javax/faces/component/UIViewRootTestCase.javaRCS file:
/cvs/javaserverfaces-sources/jsf-api/test/javax/faces/component/UIViewRootTestCase.java,v
retrieving revision 1.18
diff -u -r1.18 UIViewRootTestCase.java-
- test/javax/faces/component/UIViewRootTestCase.java 18 Mar 2005 14:52:07
-0000 1.18
+++ test/javax/faces/component/UIViewRootTestCase.java 12 Apr 2005 21:39:25 -0000
@@ -15,6 +15,7 @@
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
+import java.io.IOException;
import javax.faces.FactoryFinder;
import javax.faces.event.AbortProcessingException;
import javax.faces.event.FacesEvent;
@@ -25,6 +26,7 @@
import javax.faces.context.FacesContext;
import javax.faces.component.UIComponent;
import javax.faces.component.UIViewRoot;
+import javax.faces.component.UIInput;
import javax.faces.event.PhaseId;
import javax.faces.el.ValueBinding;
import javax.faces.el.MethodBinding;
@@ -208,19 +210,33 @@
- test/javax/faces/component/UIViewRootTestCase.java 18 Mar 2005 14:52:07
public void testPhaseMethBinding() throws Exception
{ UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null); - doTestPhaseMethodBinding(root); + doTestPhaseMethodBinding(root, false); + }
- public void testPhaseMethBindingSkipping() throws Exception
{ + UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null); + doTestPhaseMethodBinding(root, true); }
public void testPhaseListener() throws Exception
{ UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null); - doTestPhaseListener(root); + doTestPhaseListener(root, false); + }
- public void testPhaseListenerSkipping() throws Exception
{ + UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null); + doTestPhaseListener(root, true); }
public void testPhaseMethodBindingAndListener() throws Exception
{ UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null); - doTestPhaseMethodBindingAndListener(root); + doTestPhaseMethodBindingAndListener(root, false); }
- public void testPhaseMethodBindingAndListenerSkipping() throws Exception
{ + UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null); + doTestPhaseMethodBindingAndListener(root, true); + }
public void testPhaseMethBindingState() throws Exception
{ UIViewRoot root = facesContext.getApplication().getViewHandler().createView(facesContext, null); @@ -228,7 +244,7 @@ root = facesContext.getApplication().getViewHandler().createView(facesContext, null); root.restoreState(facesContext, state); - doTestPhaseMethodBinding(root); + doTestPhaseMethodBinding(root, false); }
public void testPhaseListenerState() throws Exception
{ @@ -237,7 +253,7 @@ root = facesContext.getApplication().getViewHandler().createView(facesContext, null); root.restoreState(facesContext, state); - doTestPhaseListener(root); + doTestPhaseListener(root, false); }
public void testPhaseMethodBindingAndListenerState() throws Exception
{ @@ -246,18 +262,37 @@ root = facesContext.getApplication().getViewHandler().createView(facesContext, null); root.restoreState(facesContext, state); - doTestPhaseMethodBindingAndListener(root); + doTestPhaseMethodBindingAndListener(root, false); }
-
public void doTestPhaseMethodBinding(UIViewRoot root) throws Exception {
- public void doTestPhaseMethodBinding(UIViewRoot root,
- boolean skipping) throws Exception {
- PhaseSkipTestComponent comp = null;
- if (skipping) { + comp = new PhaseSkipTestComponent(); + root.getChildren().add(comp); + facesContext.responseComplete(); + }
doTestPhaseMethodBindingWithPhaseId(root,
PhaseId.APPLY_REQUEST_VALUES); - if (skipping) { + assertTrue(!comp.isDecodeCalled()); + }
doTestPhaseMethodBindingWithPhaseId(root, PhaseId.PROCESS_VALIDATIONS); - if (skipping) { + assertTrue(!comp.isProcessValidatorsCalled()); + }
doTestPhaseMethodBindingWithPhaseId(root, PhaseId.UPDATE_MODEL_VALUES); - if (skipping) { + assertTrue(!comp.isProcessUpdatesCalled()); + }
doTestPhaseMethodBindingWithPhaseId(root, PhaseId.INVOKE_APPLICATION);
doTestPhaseMethodBindingWithPhaseId(root, PhaseId.RENDER_RESPONSE); - if (skipping) { + assertTrue(!comp.isEncodeBeginCalled()); + }
}
@@ -282,13 +317,32 @@
}- public void doTestPhaseListener(UIViewRoot root) throws Exception {
- public void doTestPhaseListener(UIViewRoot root,
- boolean skipping) throws Exception {
- PhaseSkipTestComponent comp = null;
- if (skipping) { + comp = new PhaseSkipTestComponent(); + root.getChildren().add(comp); + facesContext.responseComplete(); + }
doTestPhaseListenerWithPhaseId(root,
PhaseId.APPLY_REQUEST_VALUES);- if (skipping)
{ + assertTrue(!comp.isDecodeCalled()); + }
doTestPhaseListenerWithPhaseId(root, PhaseId.PROCESS_VALIDATIONS);- if (skipping) { + assertTrue(!comp.isProcessValidatorsCalled()); + }
doTestPhaseListenerWithPhaseId(root, PhaseId.UPDATE_MODEL_VALUES); - if (skipping) { + assertTrue(!comp.isProcessUpdatesCalled()); + }
doTestPhaseListenerWithPhaseId(root, PhaseId.INVOKE_APPLICATION);
doTestPhaseListenerWithPhaseId(root, PhaseId.RENDER_RESPONSE); - if (skipping) { + assertTrue(!comp.isEncodeBeginCalled()); + }
}
@@ -306,17 +360,36 @@
}- public void doTestPhaseMethodBindingAndListener(UIViewRoot root) throws
Exception {
- public void doTestPhaseMethodBindingAndListener(UIViewRoot root,
- boolean skipping) throws Exception {
- PhaseSkipTestComponent comp = null;
- if (skipping) { + comp = new PhaseSkipTestComponent(); + root.getChildren().add(comp); + facesContext.responseComplete(); + }
doTestPhaseMethodBindingAndListenerWithPhaseId(root,
PhaseId.APPLY_REQUEST_VALUES); - if (skipping) { + assertTrue(!comp.isDecodeCalled()); + }
doTestPhaseMethodBindingAndListenerWithPhaseId(root,
PhaseId.PROCESS_VALIDATIONS);- if (skipping)
{ + assertTrue(!comp.isProcessValidatorsCalled()); + }
doTestPhaseMethodBindingAndListenerWithPhaseId(root,
PhaseId.UPDATE_MODEL_VALUES);- if (skipping)
{ + assertTrue(!comp.isProcessUpdatesCalled()); + }
doTestPhaseMethodBindingAndListenerWithPhaseId(root,
PhaseId.INVOKE_APPLICATION);
doTestPhaseMethodBindingAndListenerWithPhaseId(root,
PhaseId.RENDER_RESPONSE);- if (skipping)
{ + assertTrue(!comp.isEncodeBeginCalled()); + }
}
@@ -673,6 +746,46 @@
public PhaseId getPhaseId()
{ return phaseId; }
- }
- public static class PhaseSkipTestComponent extends UIInput {
- private boolean decodeCalled = false;
- public void decode(FacesContext context)
{ + decodeCalled = true; + }
- public boolean isDecodeCalled()
{ return decodeCalled; }
- private boolean encodeBeginCalled = false;
- public void encodeBegin(FacesContext context) throws IOException
{ + encodeBeginCalled = true; + }
- public boolean isEncodeBeginCalled()
{ return encodeBeginCalled; }
- private boolean processValidatorsCalled = false;
- public void processValidators(FacesContext context)
{ + processValidatorsCalled = true; + }
- public boolean isProcessValidatorsCalled()
{ + return processValidatorsCalled; + }
- private boolean processUpdatesCalled = false;
- public void processUpdates(FacesContext context)
{ + processUpdatesCalled = true; + }
- public boolean isProcessUpdatesCalled()
{ + return processUpdatesCalled; + }
}
-
from javaserverfaces-spec.
@edburns said:
Need to fix this as well, since it is no longer true after TCCI:
4. Made UViewRoot a source of PhaseEvent(s) for all phases of
the request processing lifecycle except
RestoreView. Provided additional "before" and "after" phase
listener attributes for the <f:view> tag. Please see Section
4.1.17 "UIViewRoot" for details.
from javaserverfaces-spec.
@edburns said:
Actually, the currently specified behavior is correct.
from javaserverfaces-spec.
@edburns said:
Prepare to delete "spec" subcomponent.
from javaserverfaces-spec.
@edburns said:
Move all to 1.2
from javaserverfaces-spec.
@manfredriem said:
Closing resolved issue out
from javaserverfaces-spec.
File: 8-newclasses.tar.gz
Attached By: @edburns
from javaserverfaces-spec.
This issue was imported from java.net JIRA JAVASERVERFACES_SPEC_PUBLIC-8
from javaserverfaces-spec.
Marked as fixed on Thursday, March 4th 2010, 6:09:30 am
from javaserverfaces-spec.
Related Issues (20)
- CDI shortcut for search expressions HOT 2
- ActionListener and PhaseListener declared in Facelet: Injectable or not? HOT 1
- ProtectedViewException for a protectedview access while checking the OriginHeader HOT 1
- JSF 2.3 Table 5-3 JSF artifacts eligible for injection - Constructor Injection - Not supported HOT 1
- 11.4.6 should specify "search-expression-context-factory" rather than "search-expression-context-kit-factory" HOT 1
- wrong link to Mojarra on spec front page HOT 1
- JSF 2.3 spec section 2.5.2.1 typo HOT 1
- ResourceVisitOption.TOP_LEVEL_VIEWS_ONLY clarification HOT 1
- Add PartialResponseWriterWrapper HOT 3
- StringIndexOutOfBoundsException when using jsf 2.3.3 on tomcat 9.0.2 HOT 2
- Determine url of h:outputLink at click time HOT 4
- Implement cc:insertPassthroughAttributes HOT 1
- importConstants should be allowed everywhere, not only in f:metadata HOT 3
- JSF 2.3 with Java 10&11 not recognizing generic types with f:viewParam HOT 2
- Make javascript functions created by h:commandScript return a Promise HOT 1
- javax.faces.annotation.ManagedProperty websocket event incompatibility HOT 2
- Protected View Exception
- Change locale is not working HOT 1
- Replace "fat" XML responses with modern JSON/RESTful responses HOT 2
- typo in webpage HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from javaserverfaces-spec.