Code Monkey home page Code Monkey logo

Comments (19)

glassfishrobot avatar glassfishrobot commented on June 21, 2024

Reported by @edburns

from javaserverfaces-spec.

glassfishrobot avatar glassfishrobot commented on June 21, 2024

@edburns said:
up to p2 feature

from javaserverfaces-spec.

glassfishrobot avatar glassfishrobot commented on June 21, 2024

@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.

glassfishrobot avatar glassfishrobot commented on June 21, 2024

rogerk said:
Taking ownership.

from javaserverfaces-spec.

glassfishrobot avatar glassfishrobot commented on June 21, 2024

@edburns said:
Take ownership

from javaserverfaces-spec.

glassfishrobot avatar glassfishrobot commented on June 21, 2024

@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));+ }

    • }
      }

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.

glassfishrobot avatar glassfishrobot commented on June 21, 2024

@edburns said:
Created an attachment (id=6)
new classes for recently attached change-bundle

from javaserverfaces-spec.

glassfishrobot avatar glassfishrobot commented on June 21, 2024

rogerk said:
r=rogerk

from javaserverfaces-spec.

glassfishrobot avatar glassfishrobot commented on June 21, 2024

@edburns said:
fixed in EDR

from javaserverfaces-spec.

glassfishrobot avatar glassfishrobot commented on June 21, 2024

@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.

glassfishrobot avatar glassfishrobot commented on June 21, 2024

@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 @@
*

    • * + *

      Initialize a state flag to false.

      + *
    • 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.

      • 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.

        • 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 @@

    private int lastId = 0;

    • /**
      • Set and cleared during the lifetime of a lifecycle phase. Has

      • no meaning between phases. If true, the lifecycle
      • 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); }
    • 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) {
      try

      Unknown 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); }
    • 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 @@
    • 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); }
    • 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); }
    • // 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.java

      RCS 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 @@

    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.

glassfishrobot avatar glassfishrobot commented on June 21, 2024

@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.

glassfishrobot avatar glassfishrobot commented on June 21, 2024

@edburns said:
Actually, the currently specified behavior is correct.

from javaserverfaces-spec.

glassfishrobot avatar glassfishrobot commented on June 21, 2024

@edburns said:
Prepare to delete "spec" subcomponent.

from javaserverfaces-spec.

glassfishrobot avatar glassfishrobot commented on June 21, 2024

@edburns said:
Move all to 1.2

from javaserverfaces-spec.

glassfishrobot avatar glassfishrobot commented on June 21, 2024

@manfredriem said:
Closing resolved issue out

from javaserverfaces-spec.

glassfishrobot avatar glassfishrobot commented on June 21, 2024

File: 8-newclasses.tar.gz
Attached By: @edburns

from javaserverfaces-spec.

glassfishrobot avatar glassfishrobot commented on June 21, 2024

This issue was imported from java.net JIRA JAVASERVERFACES_SPEC_PUBLIC-8

from javaserverfaces-spec.

glassfishrobot avatar glassfishrobot commented on June 21, 2024

Marked as fixed on Thursday, March 4th 2010, 6:09:30 am

from javaserverfaces-spec.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.