Re: problem getting 1.1.1 from svn

2006-01-04 Thread Ken Weiner
Even with that suggested URL,

 svn co http://svn.apache.org/repos/asf/myfaces/legacy/tags/before_maven_reorg/release/tags/1_1_1/

I get the same error:

 Fetching external item into '1_1_1\share'
 svn: URL 'https://svn.apache.org/repos/asf/myfaces/share/tags/1_1_1' doesn't exist

I'm not familiar with the term externals. I've always been
confused by the way the MyFaces SVN repository works (how you can't see
the files if you view
http://svn.apache.org/repos/asf/myfaces/legacy/tags/before_maven_reorg/release/tags/1_1_1/
in a web browser) but you can use that URL to check out files).

Anyway, I'll hold off for now until you have a chance to sort things
out after restructuring for Maven. I'm very much looking forward
to the new Maven 2 build...
On 1/4/06, Sean Schofield [EMAIL PROTECTED] wrote:
This is because we renamed the share project to commons.Even thougheverything is preserved in the legacy folder[1] there are apparentlysome effects we hadn't anticipated.For now you should be able to getit using the legacy/release folder[2].
This is actually a pretty big mess to clean up.Maybe we can fix thisby creating externals for the release tags.I'm still not sure whatto do about all of the other externals for the other tags and branches
...Sean[1] http://svn.apache.org/repos/asf/myfaces/legacy/tags/before_maven_reorg/[2] 
http://svn.apache.org/repos/asf/myfaces/legacy/tags/before_maven_reorg/release/tags/1_1_1/



problem getting 1.1.1 from svn

2006-01-03 Thread Ken Weiner
I tried to checkout the MyFaces source tree from SVN using this command:

svn co https://svn.apache.org/repos/asf/myfaces/release/tags/1_1_1/

It was able to get the api and impl subfolders, but when it got to share, I got this error:

Fetching external item into '1_1_1\share'
svn: URL 'https://svn.apache.org/repos/asf/myfaces/share/tags/1_1_1' doesn't exist

Am I using the right technique to obtain the MyFaces 1.1.1 sources from SVN?

-Ken


Re: how can i arrange the style in the t:selectChecManyBox

2005-12-21 Thread Ken Weiner
Could you draw an example of the arrangement of the checkboxes that you're trying to produce?On 12/19/05, Lee YanSong 
[EMAIL PROTECTED] wrote:Hi all
now i use t:selectManyCheckbox to display a list of checkbox, but the style displayed is
not my wanted. if i want to arrangethewidthevery column, how did i do ?

this is my code, butthe 
t:selectManyCheckbox style=width:100% layout=lineDirection layoutWidth=2 
f:selectItems
value=#{createRulePage.targetingFields}/

/t:selectManyCheckbox




Re: MyFaces Cherokee

2005-12-18 Thread Ken Weiner
Hi Matthias,

Does the book have some good examples of building components that are
based on child components, e.g. a PhoneNumber component with 3
InputText child components?

-KenOn 12/16/05, Matthias Wessendorf [EMAIL PROTECTED] wrote:
PS: The book is cool, I have read it already ;)On 12/16/05, Nicklas Karlsson [EMAIL PROTECTED] wrote: February 2006 - book release: Pro JSF by Jonas Jacobi and John Fallows
 (Apress); targeted at JSF Component developers



Re: Prevent Firefox from caching..

2005-11-10 Thread Ken Weiner
We use something similar which seems to work fine on Firefox and IE:

res:setHeader name=Pragmano Cache/res:setHeader
res:setHeader name=Cache-controlno-store,no-cache/res:setHeader
res:setDateHeader name=Expire0/res:setDateHeader

These are taglibs from http://jakarta.apache.org/taglibs/On 11/10/05, Mario Ivankovits 
[EMAIL PROTECTED] wrote:[EMAIL PROTECTED]
 wrote: Does anyone know, how to tell Firefox not to cache pages... I have implemented a Chart via Jenia and the problem is that, when the page is display, the chart from the previous request is shown, until I
 press F5We useresponse.setHeader(Cache-Control, no-store);response.setHeader(Pragma, no-cache);And this works.---Mario



Re: ApplicationImpl Configuration Problem

2005-11-09 Thread Ken Weiner
Thanks for the reply, Martin.

I'm not really sure if I understand whether or not they are MyFaces
specific or not. Some seem to be standard as they have
javax.faces in their ID's and come from a file called
standard-faces.config.xml.

These are the converter ID's for which FacesConfigurator tries to set the Converter configuration instance:

javax.faces.convert.BooleanConverter
javax.faces.convert.NumberConverter
javax.faces.convert.BigIntegerConverter
javax.faces.convert.DoubleConverter
org.lmb.faces.converter.bool.BooleanConverter
javax.faces.convert.FloatConverter
javax.faces.convert.IntegerConverter
javax.faces.convert.ByteConverter
org.apache.myfaces.convert.StringArrayConverter
org.apache.myfaces.custom.fileupload.UploadedFileConverter
javax.faces.convert.BigDecimalConverter
javax.faces.convert.ShortConverter
javax.faces.convert.CharacterConverter
javax.faces.convert.LongConverter
javax.faces.convert.DateTimeConverter
Since my Application is not an ApplicationImpl, then FacesConfigurator
doesn't inject the configuration into ApplicationImpl and then when
MyApplication delegates to ApplicationImpl, ApplicationImpl throws a
NullPointerException in this code because it has a registered converter
but not the corresponding configuration:

private Converter internalCreateConverter(Class targetClass) {


Converter converter = (Converter) converterClass.newInstance();


org.apache.myfaces.config.impl.digester.elements.Converter
converterConfig =

(org.apache.myfaces.config.impl.digester.elements.Converter)

_converterClassNameToConfigurationMap.get(converterClass.getName());


Iterator it = converterConfig.getProperties(); -- a NPE is thrown
here because converterConfig is null

}

The result is this stack trace. My application is SpringApplication:

Caused by: javax.faces.FacesException: Could not instantiate converter: class javax.faces.convert.IntegerConverter
 at org.apache.myfaces.application.ApplicationImpl.internalCreateConverter(ApplicationImpl.java:556)
 at org.apache.myfaces.application.ApplicationImpl.createConverter(ApplicationImpl.java:494)
 at org.lmb.web.jsf.SpringApplication.createConverter(SpringApplication.java:287)
 ... 34 more
Caused by: java.lang.NullPointerException
 at org.apache.myfaces.application.ApplicationImpl.internalCreateConverter(ApplicationImpl.java:534)
 ... 36 more


Does this make sense? Is this a problem, or am I doing something wrong
by writing my own application factory and application and delegating to
the original?

-Ken
On 11/9/05, Martin Marinschek [EMAIL PROTECTED] wrote:
But this is just additional, MyFaces specific configuration, right?The converters get added alright, they are just not processingadditional stuff in the faces-config file that would be special toMyFaces?
regards,MartinOn 11/9/05, Ken Weiner [EMAIL PROTECTED] wrote: I have a custom ApplicationFactory that wraps the original ApplicationFactory so that it can produce a custom Application that wraps
 the original Application.It is configured via faces-config.xml:factoryapplication-factorycustom.MyApplicationFactory/application-factory/factory
As a result, the FacesConfigurator class is not able to properly configure all the standard Converters (for Integer, Long, etc) because it relies on setting instances of org.apache.myfaces.config.impl.digester.elements.Converter
 on the ApplicationImpl (and my Application is not an instance of ApplicationImpl):if(application instanceof ApplicationImpl){for (Iterator it = _dispenser.getConverterConfigurationByClassName();
 it.hasNext();){String converterClassName = (String) it.next();((ApplicationImpl) application).addConverterConfiguration(converterClassName,
 _dispenser.getConverterConfiguration(converterClassName));}}Therefore this inner block of code is passed over in my environment.Is there any way that MyFaces can be changed so that ApplicationImpl does not
 need to know about org.apache.myfaces.config.impl.digester.elements.Converter internally?It would be nice if the FacesConfigurator could configure any Application without relying on it being an ApplicationImpl.
--http://www.irian.atYour JSF powerhouse -JSF Consulting, Development andCourses in English and GermanProfessional Support for Apache MyFaces



Re: Boolean converter?

2005-09-15 Thread Ken Weiner
Yes, the issue in JIRA was http://issues.apache.org/jira/browse/MYFACES-451
You can get the source code from the MyFaces sandbox.On 9/14/05, Dennis Byrne [EMAIL PROTECTED] wrote:
I think he put it in JIRA. Original message Date: Wed, 14 Sep 2005 18:00:05 -0500
From: CONNER, BRENDAN \(SBCSI\) [EMAIL PROTECTED]Subject: Boolean converter?To: MyFaces Discussion 
users@myfaces.apache.orgI recall from one of the earlier postings that someone haddeveloped aboolean converter.Is that available?- BrendanDennis Byrne



setting headers on the response in JSF

2005-09-15 Thread Ken Weiner
What is the best way to set headers on the HttpResponse to control things such as caching directives?

For example:
response.setHeader(Cache-Control, no-cache);

Would I need to implement a PhaseListener? Is this done through config
parameters of some kind? Should I just include a scriptlet in
each JSP page?

-Ken


Re: changing the rendering behavior of HtmlSelectManyCheckbox

2005-09-09 Thread Ken Weiner
Thanks. Does your columns attribute work with page direction and
line direction? I ended up extending the component as well to
handle a width of checkboxes in both directions. I'll take a
look at your code next week to see if it is similar and if I can
enhance it with both drawing directions if it isn't already done.On 9/7/05, Jan Bols [EMAIL PROTECTED] wrote:
I had the same problem and ended up extending the HtmlSelectManyCheckboxcomponent. I added a columns attribute where you can specify the number
of columns you want the selectManyCheckbox to use. Like this:cc:selectManyCheckboxlayout=pageDirectioncolumns=2
f:selectItems
value=#{mySelectItems}//cc:selectManyCheckboxYou can find the sourcecode on http://sourceforge.net/projects/jsf-comp
but there's also a jar that you can add to WEB-INF/lib directory. The jarfile is found on http://www.ivpv.ugent.be/~jan/myfacessandbox.jar. The jar
file is for use with the nightly version (so not the 1.0.9 version) ofmyfaces dating from 2005-08-15 but with a bit of luck it should also workwith the current nightly version of myfaces.You can find a working example of this on
https://www.ivpv.ugent.be/contact/new.faces?lang=en . Also onhttp://www.ivpv.ugent.be/~jan/selectTest.jsp
 you can find a jsf file toget you started...Hope this helps.JanOn Thu, 01 Sep 2005 22:19:36 +0200, Ken Weiner [EMAIL PROTECTED] wrote:
 I need to find a way to render the checkboxes in HtmlSelectManyCheckbox in a format other than a single horizontal or vertical row. My first thought was to extend HtmlSelectManyCheckbox and make a new attribute called width
 and use this in conjunction with the layout attribute as follows: h:selectManyCheckbox value=#{backingBean.someArray} layout=pageDirection width=3
 f:selectItems value=#{backingBean.someSelectItems}/ /h:selectManyCheckbox would produce [x] [x] [x] [x] [x] [x] [x] [x] [x] [x] [x] [x]
 [x] [x] [x] [x] [x] [x] etc. and h:selectManyCheckbox value=#{backingBean.someArray} layout=lineDirection width=3
 f:selectItems value=#{backingBean.someSelectItems}/ /h:selectManyCheckbox would produce [x] [x] [x] [x] [x] [x] etc. [x] [x] [x] [x] [x] [x]
 [x] [x] [x] [x] [x] [x] Is there better way to accomplish this? Should I be thinking about using SelectItemGroups? I'm ultimately trying to create a 2 X 2 set of checkboxes. Thanks!
 -Ken


Re: JSF + Spring + Hibernate

2005-08-31 Thread Ken Weiner
I have a question about designing a webapp to use a DAO layer, lazily
loaded objects, Hibernate, and the OpenSessionInView technique.

Doesn't this strategy make it very difficult to reimplement the DAO
layer sometime in the future? If you switched a DAO
implementation from Hibernate to let's say, Spring JDBC, then how would
all the lazy loading work? There would be no equivalent
OpenSessionInView technique for Spring JDBC. For this reason, I
have been shying away from designing my domain objects such that the
rest of the app expects them to lazily load data.

So, instead of a Company class having a getEmployees() method, I would
choose, instead, to have a CompanyDao.getEmployees(Company company)
method that must be called at the point my webapp needs all the
Employees for a Company.

Have any of you had the same concerns? Or am I missing how a
webapp that relies on lazy-loaded object graphs can change DAO
implementations easily?

-Ken


Re: JSF + Spring + Hibernate

2005-08-31 Thread Ken Weiner
The issue I was getting at was that knowing that your app has this lazy
loading capability, you may make different design decisions on what
methods go into your domain objects and what your domain object graph
looks like. I prefer to design the domain object graphs, keeping in
mind that the DAO layer would be responsible for completely loading the
graphs. So if there are many Employees for a Company and you
don't always want to load the Employees when you load a Company, then I
probably wouldn't put a getEmployees() method on the Company
class. I guess you could argue that it is okay to add the
getEmployees() method and document it so that sometimes it returns null
and sometimes it doesn't, but that seems undesireable to me. I'd
rather leave off the method and add an extra method to a DAO that can
fetch the employees for a Company whenever I need them.

-KenOn 8/31/05, Werner Punz [EMAIL PROTECTED] wrote:
well OpenSessionInView... is one of those rare circumstances where itactually makes sense, because it eases the portability and implementation...I would not say it reall is dependend on the view layer, more on the
control layer of the server...It is one of those border cases...Larry Meadors wrote: Heheh, are you suggesting that making your DAO layer depend upon your view layer is a bad idea?
 I would have to agree Larry On 8/31/05, Ken Weiner [EMAIL PROTECTED] wrote:I have a question about designing a webapp to use a DAO layer, lazily loaded
objects, Hibernate, and the OpenSessionInView technique. Doesn't this strategy make it very difficult to reimplement the DAO layersometime in the future?If you switched a DAO implementation from Hibernate
to let's say, Spring JDBC, then how would all the lazy loading work?Therewould be no equivalent OpenSessionInView technique for Spring JDBC.Forthis reason, I have been shying away from designing my domain objects such
that the rest of the app expects them to lazily load data. So, instead of a Company class having a getEmployees() method, I wouldchoose, instead, to have a CompanyDao.getEmployees
(Company company) methodthat must be called at the point my webapp needs all the Employees for aCompany. Have any of you had the same concerns?Or am I missing how a webapp that
relies on lazy-loaded object graphs can change DAO implementations easily? -Ken


Re: best way to initialize BackingBean?

2005-08-31 Thread Ken Weiner
I hadn't thought of that. I guess it would work fine when you
want to specify a converter by ID. However, it wouldn't work when
JSF looks for a converter by Class, would it?On 8/31/05, Craig McClanahan [EMAIL PROTECTED] wrote:
On 8/31/05, Ken Weiner 
[EMAIL PROTECTED] wrote:

The Spring JSF integration I've seen focuses on enabling Spring IoC for
JSF managed beans. There is a way to enable IoC for JSF
Converters, Validators, and UIComponents too. I posted
information on the Spring JSF Wiki: http://opensource.atlassian.com/confluence/spring/x/Qgo

I was hoping Spring would incorporate the SpringApplication and
SpringApplicationFactory code in a future release, but there haven't
yet been comments on the Wiki page.

For converters, isn't this already possible out of the box (if you've got the Spring IoC integration with managed beans)?

 h:inputText ... converter=#{myConverter} .../

where myConverter is a spring bean. 

For validators, you can bind to a validator *method* of some bean that happens to be created via the IoC facility.


-Ken
Craig





Re: Errors

2005-08-29 Thread Ken Weiner
I think you need to make sure servlet.jar is in your classpath.On 8/29/05, [EMAIL PROTECTED] 
[EMAIL PROTECTED] wrote:Hello!I try to implement my own custom compontent. But I get one Error in my 
Tag.javaand one Error for the project.The type javax.servlet.jsp.tagext.Tag cannot be resolved. It is indirectly referenced from required .class filesThe
project was not built since its build path is incomplete. Cannot find
the class file for javax.servlet.jsp.tagext.Tag. Fix the build path
then try building this projectWhats the problem?Thanks shed--Ein Service von http://www.sms.at


Re: x:convertBoolean

2005-08-26 Thread Ken Weiner
Thanks Sean.  I just created
http://issues.apache.org/jira/browse/MYFACES-451 and uploaded my code
and patches in case anyone wants to take a look.  I'm happy to add
more docs and unit tests if required.

On 8/25/05, Sean Schofield [EMAIL PROTECTED] wrote:
 Looking forward to your contribution.  Dennis is correct in pointing
 out that the patch should be for sandbox.  Feel free to ask around on
 the dev list if you have questions regarding procedure, patching, etc.
 
 sean


Re: How to call a method in the backing bean from a JSF page

2005-08-25 Thread Ken Weiner
I am not sure if this is the best way, but one idea that could work is
to create a PhaseListener that acts after the view is restored.  In
this phase listener, you could check if the view being restored is the
view for which you want to call your backing bean method.  Then, you
could obtain a MessageBinding object for your backing bean expression
and use that to call your method.

Create YourPhaseListener and register it in faces-config.xml:
faces-config
...
lifecycle
phase-listenercom.yourcompany.YourPhaseListener/phase-listener
/lifecycle
/faces-config

public class YourPhaseListener implements PhaseListener {

public void beforePhase(PhaseEvent event) {
// Nothing to do
}

public void afterPhase(PhaseEvent event) {
FacesContext facesContext = event.getFacesContext();
UIViewRoot viewRoot = facesContext.getViewRoot();
String idOfYourPage = ...
if (viewRoot.getId().equals(idOfYourPage)) {
Application application = facesContext.getApplication();
String methodExpression = ...
Class[] params = ...
MethodBinding methodBinding =
application.getMessageBinding(methodExpression, params);
methodBinding.invoke(facesContext, ...);
}

public PhaseId getPhaseId() {
return PhaseId.RESTORE_VIEW;
}

}

Disclaimer: I haven't tried this code so I don't know if it would work
or even compile.

-Ken

On 8/24/05, Saul Qunming Yuan [EMAIL PROTECTED] wrote:
 Thanks for your response. I guess I didn't make me clear here. My question
 is how to call a method in the backing bean from a JSF page without
 rendering out anything to the screen.


x:convertBoolean

2005-08-25 Thread Ken Weiner
JSF has f:convertDateTime and f:convertNumber, but nothing I've
seen to convert Booleans to custom values.  Has something like
x:convertBoolean already been written by anyone?  I have just
written one and would be willing to contribute it to MyFaces if there
is interest.

It is used like this:

h:outputText value=#{backingBean.isABooleanValue}
x:convertBoolean trueValue=Yes falseValue=No/
/h:outputText

-Ken


Re: x:convertBoolean

2005-08-25 Thread Ken Weiner
Ok, great, I will get familiar with the sandbox, change my code to
follow the packages for tomahawk, and submit patches to JIRA.  Looking
forward to participating...

On 8/25/05, Sean Schofield [EMAIL PROTECTED] wrote:
 Suggestion: Add an issue to JIRA (select sandbox as the component
 type.)  This gives committers a chance to shout down any ideas they
 find completely objectionable so you don't waste your time (this is
 not one of those ideas btw.)
 
 Then provide a SVN patch and we'll add it to sandbox.  Be prepared to
 provide documentation and a simple example (or add to an existing
 simple example) when appropriate.  The docs and examples are now
 required for new tomahawk goodies.
 
 sean
 
 On 8/25/05, [EMAIL PROTECTED] [EMAIL PROTECTED] wrote:
 
  Looks convenient Ken.  Please post your code.  I would like to see it, even
  if this does not make it to the issue tracker.
 
  Dennis Byrne
 



Re: Why not reuse jsf-api.jar from Sun?

2005-08-24 Thread Ken Weiner
Martin, yes, I will file this as an issue in Jira and reference this
email thread.

Craig, thank you so much for your response.  I now understand the
relationship between a java spec and the physical API source code much
better.  You brought up an interesting point about JSF being different
in that there is more executable code than in other frameworks.  What
was the reason that classes like javax.faces.render.Renderer were
defined as abstract classes rather than interfaces?  In Section 8.2,
the spec refers to what an instance of Renderer should do.  Does the
word instance imply a class rather than interface or is it up to the
implementation?

-Ken

On 8/24/05, Martin Marinschek [EMAIL PROTECTED] wrote:
 Ken,
 
 can I ask you to file that as a jira-issue?
 
 If possible, include both yours and Craigs evaluation of the problem
 as comments.
 
 regards,
 
 Martin
 
 On 8/24/05, Craig McClanahan [EMAIL PROTECTED] wrote:
  On 8/23/05, Ken Weiner [EMAIL PROTECTED] wrote:
   Thanks for the replies.  Do other specs from JCP behave this way?
 
  Yes, they *all* do.  An implementation of a JCP spec is required to
  provide the javax.foo classes, as well as whatever implementation
  classes they require to conform to the spec requirements.  The primary
  difference for JSF is there is relatively more executable code in the
  javax.faces classes, rather than just specifying APIs.  But the
  compatibility test that MyFaces will be required to pass include
  signature tests that ensure any given implementation implements
  *exactly* the set of public and protected methods (and variables if
  any) as is required by the spec.
 
   don't remember ever seeing another situation where there are multiple
   versions of the same exact (same fully-qualified name) class.
 
  Question -- where do you get your definition of javax.servlet.Servlet
  when you compile your webapp?  Answer ... that is totally up to the
  server implementation you are using -- they do *not* all necessarily
  share the same physical source code (although such sharing is not
  uncommon either -- lots of app server vendors use the same
  javax.servlet classes that Tomcat does, for example, because they are
  available under the Apache license).
 
  The same principle applies to all of the JCP specs.
 
   Here is an example of how my component would break if I switched
   implementations:
  
   Let's say I am coding a component that has children components.  My
   component extends javax.faces.render.Renderer.  If I am using the RI,
   I may be tempted to accept (not override) the implementation of
   Renderer.encodeChildren() which simply iterates thought the children
   and renders them as follows:
  
   public void encodeChildren(FacesContext context, UIComponent 
   component)
   throws IOException {
   if (context == null || component == null) {
   throw new NullPointerException();
   }
   Iterator kids = component.getChildren().iterator();
   while (kids.hasNext()) {
   UIComponent kid = (UIComponent) kids.next();
   kid.encodeBegin(context);
   if (kid.getRendersChildren()) {
   kid.encodeChildren(context);
   }
   kid.encodeEnd(context);
   }
   }
  
   Now if I switch to MyFaces, none of my children would render because
   the MyFaces version of javax.faces.render.Renderer.encodeChildren()
   does not render the children.  It looks like this:
  
   public void encodeChildren(FacesContext context,  UIComponent 
   component)
   throws IOException
   {
   if (context == null) throw new NullPointerException(context);
   if (component == null) throw new 
   NullPointerException(component);
   }
  
   So if I understand things correctly, my component would essentially
   break because none of its children would render with MyFaces.  Does
   that make sense?
  
 
  There are a couple bunch of overlapping questions here.
 
  * Does the spec require a particular behavior of this method?  If so,
then an implementation that doesn't follow those requirements is
totally broken, and should not be used until it is fixed.
 
  * Do the compatibility tests actually test that particular asserion?
This will vary by assertion (like any other piece of software, the
TCK tests are limited by how much resource can be devoted to
creating them), so you cannot expect 100% coverage of even the
testable assertions.  But, even if an assertion is not tested,
failure to conform to the requirements means the implementation
is broken (and, to be fair, the MyFaces folks will go out of their way
to ensure compatibility with the spec requirements).
 
  * Does a particular implementation (either the RI or MyFaces in this case)
do something *not* required by the spec?  That's also perfectly legal
as long as they don't violate any of the spec requirements

Re: Why not reuse jsf-api.jar from Sun?

2005-08-24 Thread Ken Weiner
 Trust me ... you don't want to read all the EG threads on that topic
 :-).  But the short answer is, consider what happens in a future
 version of JSF, when (for good reason) a new method signature is added
 to the Renderer API.  If it were an interface, you've just broken
 every current implementation in the world.  As an abstract base class,
 you can add a default implementation that mirrors the previous
 behavior, so the only potential breakage is if an implementation had
 their own version of that very same method signature.

It seems like you could get the best of both worlds with an interface
and an abstract class that implements it.  Since this has been
well-vetted by the EG, I'll accept the reasons it was done without an
interface.

 An actual instance, of course, must be of a concrete class that can be
 instantiated.  But whether that concrete class extends an abstract
 base class, or implements an interface, is irrelevant to how many
 copies there are.  In this particular case, it simply has to be that
 instanceof Renderer returns true, since the JSF implementation is
 going to cast it to this before calling its methods.

So, it sounds like the JSF implementation *does* get to choose whether
or not javax.faces.render.Renderer is an abstract class or in
interface since an instanceof Renderer check could be done for an
instance of either.  Am I understanding correctly?

 
 Craig



Re: confusion on best practices in regard to a VO in BackingBean

2005-08-24 Thread Ken Weiner
I believe Slawek was referring to Rick Hightower.

On 8/24/05, Rick Reumann [EMAIL PROTECTED] wrote:
 On 8/24/05, Slawek [EMAIL PROTECTED] wrote:
   
  but Rick says in his article that:
  view is only jsp page, controler is backing bean and model has business
  logic
 
  I take it by article you mean 'e-mail post' ? I don't think I posted any
 comments on JSF architecture since I obviously am just learning it myself. 
  
  -- 
  Rick


Why not reuse jsf-api.jar from Sun?

2005-08-23 Thread Ken Weiner
I am confused about the nature of the javax.faces sources that are
included in the MyFaces jar file.  They appear to have been written as
part of the MyFaces project.  Sun includes alternative versions of the
javax.faces classes in its RI distribution, placing those classes in a
seperate jar file: jsf-api.jar.  Why doesn't MyFaces reuse the
jsf-api.jar from Sun?  Shouldn't there only be one version of the API
classes, with Sun RI, MyFaces, and other supplying only the impl of
the API?

The way it is now, if I were to write my own, let's say
MyAbstractRenderer, and I extend javax.faces.render.Renderer, then my
components could break if I switch between the RI and MyFaces.  I hope
someone can help me understand the nature of the JSF spec, API
classes, and various implementations.  Thanks.

-Ken


Re: Why not reuse jsf-api.jar from Sun?

2005-08-23 Thread Ken Weiner
Thanks for the replies.  Do other specs from JCP behave this way?  I
don't remember ever seeing another situation where there are multiple
versions of the same exact (same fully-qualified name) class.

Here is an example of how my component would break if I switched
implementations:

Let's say I am coding a component that has children components.  My
component extends javax.faces.render.Renderer.  If I am using the RI,
I may be tempted to accept (not override) the implementation of
Renderer.encodeChildren() which simply iterates thought the children
and renders them as follows:

public void encodeChildren(FacesContext context, UIComponent component)
throws IOException {
if (context == null || component == null) {
throw new NullPointerException();
}
Iterator kids = component.getChildren().iterator();
while (kids.hasNext()) {
UIComponent kid = (UIComponent) kids.next();
kid.encodeBegin(context);
if (kid.getRendersChildren()) {
kid.encodeChildren(context);
}
kid.encodeEnd(context);
}
}

Now if I switch to MyFaces, none of my children would render because
the MyFaces version of javax.faces.render.Renderer.encodeChildren()
does not render the children.  It looks like this:

public void encodeChildren(FacesContext context,  UIComponent component)
throws IOException
{
if (context == null) throw new NullPointerException(context);
if (component == null) throw new NullPointerException(component);
}

So if I understand things correctly, my component would essentially
break because none of its children would render with MyFaces.  Does
that make sense?

I realize I could override the encodeChildren() method to be safe, but
don't you agree that it would be easy for someone to fall into a trap?
 Maybe, in this case, one of the implementations is not adhering to
the spec.

-Ken

On 8/23/05, Sean Schofield [EMAIL PROTECTED] wrote:
  The way it is now, if I were to write my own, let's say
  MyAbstractRenderer, and I extend javax.faces.render.Renderer, then my
  components could break if I switch between the RI and MyFaces.  I hope
  someone can help me understand the nature of the JSF spec, API
  classes, and various implementations.  Thanks.
 
 This shouldn't be the case.  The JSF spec carefully defines not only
 the method signatures but the anticipated effects of these methods.
 Both implementations should be interchangeable.
 
  -Ken
 
 sean