Hmm..I'm a bit leary about this "component" talk. I'd like to keep Struts 2 simple and I see the goal of this is to define a plugin that: * Builds configuration based on annotations * Defines default results when none specified
Things I see out of scope: * A new component model * REST support, particularly for Restful urls I interpret the "code component" in the spec to simply be an Action and the "view component" to be a Result. Anything more than that should definitely not go in core and its out of scope for this plugin. I list Rest support as out of scope, because it involves more than a simple mapper. I'm working on a Rest plugin right now, and found it needs code that would be inappropriate for non-Restful applications. Trying to be all things to all people just complicates your code and is more confusing to users. In the end, I'm happy to have a codebehind plugin that incorporates more SmartURL code, particularly its additional lookups and annotations, but again, I think it should be very simple and straightfoward. Trying to define a new component model abstraction is better served for another, more ambitious plugin. Don On 10/18/07, Brian Pontarelli <[EMAIL PROTECTED]> wrote: > Looks good. I like the name and most of the concepts. Here's some > additional thoughts: > > 1. If no code component exists and a default is not available, the code > invocation can be completely by-passed and processing should proceed > with the view component handling. The caveat here is that this will > require adding a goal to support for messaging, localization and i18n, > since this is something that is currently cumbersome. > > Also, the default handling should be spelled out with Index actions and > all the URL nuances like trailing slashes and such. > > 1.1 I'd like to add in a componentization goal here. SmartURLs and > Vertigo are leveraging a file named META-INF/component.xml (inside JAR > files) to specify not only all the action packages and the result > locations for actions and views bundled inside JAR files, but also to > specify JPA domain classes and other configuration for the component. > This is HUGE for companies that like to build components and then just > drop them in to web applications. We have a number of these including > user admin, CMS, blogs, news, todo, etc. I think that expanding this > into the specification will help solidify that this architecture can be > done on Struts2 and that it is a goal of the project. > > > > Ted Husted wrote: > > Following up on suggestions made by Don and Brian, I'd like to propose > > that we draft a formal specification describing the logic to be used > > by the (deep-breath) "Able/Code Behind/Zero-Config/SmartURLs" plugin > > for 2.1. The purpose of the specification would be to better define > > what "backward compatibility" means, and also to encourage > > implementation of this pattern by other frameworks. > > > > Following is the beginning of an early draft of a proposed > > "view-behind" specification. (In case anyone is interested, I'm using > > the JSON-RPC specification format as a model.) If there is interest in > > this proposal, I'd suggest we decide whether to complete the > > specification as part of our documentation, or at some other location. > > Of course, people working with other frameworks > > (<cough>stripes</cough>) would be welcome to join in. > > > > ---- > > > > View-Behind Specification > > Working Draft 17 October 2007 > > > > Previous Versions: > > None > > Editors: > > Ted Husted, Husted.com > > <Others TBD> > > > > This document is currently a working draft published with the intent > > of soliciting community feedback. Please send your comments and > > concerns to the public mailing-list <TBD>. > > > > This specification is designed to provide the developer with the > > information needed to implement the technology within a web > > development framework for any platform. > > > > > > 1. Overview > > > > "View-behind" is a technology that combines intelligent defaults, > > convention over configuration, and annotation, in order to streamline > > web application development. Larger applications tend to the separate > > the concerns of "business logic" and "display logic" into different > > components. View-behind works to assemble these concerns back into a > > single request/response transaction, without requiring redundant > > metadata descriptions. > > > > By leveraging intelligent defaults, convention over configuration, and > > annotation, page-behind elimates the need for XML metadata, helping > > applications become easier to write and review. The view-behind naming > > conventions are designed to be "Search Engine Optimized", and the > > view-to-code matching conventions observe existing class naming > > conventions. > > > > In a view-behind workflow, the client requests a virtual "action" URI, > > which the system maps to an optional code component. (In a Java > > implementation, a code component would be a Java class.) If there is > > no code component, a default component is utilized. The code is > > invoked, and the system selects a view component (e.g. JSP) based on a > > heuristic that utilizes the original action name and any special > > outcome provided by the code at runtime. > > > > Optionally, metadata, in the form of annotations or XML documents, may > > be used to override the components usually mapped to an action URI. > > Common application workflows can be realized without resorting to > > metadata. > > > > Optionally, in a HTTP environment, parameters to the action request > > may be presented in a "RESTful" format that utilizes slashes rather > > than the usual HTTP "?" and "&" semantics. > > > > The moniker "view-behind" is suggested since the pattern links to > > actions which then automatically select views "behind the scenes". > > View-behind differs from Code-Behind > > (http://support.microsoft.com/kb/303247) in that links are to virtual > > URIs, rather than physical files, and that a different view component > > may be selected depending on the outcome of invoking the code at > > runtime. > > > > > > 1.1. Goals > > > > The primary goals of this specification are to define the view-behind > > technology in terms of: > > > > * Mapping an action URI to a code component. > > * Mapping a runtime code outcome to an a view component. > > * Overriding the default component mappings with metadata. > > * Mapping RESTful URIs to conventional parameterized URIs. > > > > > > 1.2. Non-Goals > > > > View-behind does not address issues such as validation, security, > > session management, or the generation of a response to common errors, > > such as "File not found". Developers are expected to utilized existing > > features found in the underlying platforms to implement such features. > > > > > > 1.3. Limitations > > > > TODO > > > > > > 2. Differences From Prior Versions > > > > None. > > > > > > 3. Requirements > > > > The key words MUST, MUST NOT, REQUIRED, SHALL, SHALL NOT, SHOULD, > > SHOULD NOT, RECOMMENDED, MAY and OPTIONAL in this document are to be > > interpreted as described in RFC 2119. > > > > An implementation is not compliant if it fails to satisfy one or more > > of the MUST requirements for the patterns it implements. An > > implementation that satisfies all of the MUST and all of the SHOULD > > requirements for its features is said to be unconditionally compliant; > > one that satisfies all of the 'must' requirements but not all of the > > SHOULD requirements for its features is said to be conditionally > > compliant. > > > > > > 4. Terminology > > > > Below is a summary of some terminology used in this documentation that > > can help in disambiguation of commonly applied and therefore often > > overloaded terms: > > > > Action Request/Response > > A named operation supported by the application that expects zero > > or more input parameters and ultimately returns a response to the > > client, usually in the form of a HTML page > > > > Client > > The agent that initiates the action request and receives the action > > response > > > > Code Component > > A software component that executes business logic or data access > > logic as part of the > > client's request > > > > System > > The software component (e.g. web application framework) that > > implements page-behind. > > > > View Component > > A page template or similar component that is responsible for > > rendering a response to client's request > > > > > > 5. Selecting a Code-File (Action Request) > > > > TODO > > > > > > 6. Selecting a Page-File (Action Response) > > > > TODO > > > > > > 7. Processing a Request/Response > > > > TODO > > > > > > 8. Utilizing Optional Metadata (Annotations or XML) > > > > TODO > > > > > > 9. Parsing RESTful parameters > > > > TODO > > > > > > 10. Naming Artifacts (actions, results, parameters) > > > > ---- > > > > Thoughts? > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]