----- Original Message ----- From: "David M. Karr" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Monday, July 22, 2002 11:45 PM Subject: Re: Struts-EL: Ideas about "name" and indexed "name" attributes?
> >>>>> "Craig" == Craig R McClanahan <[EMAIL PROTECTED]> writes: > > Craig> I've been thinking about this issue as well, as you might imagine. > > Craig> For general form field properties, I'm assuming that we would have to make > Craig> the existence of the form bean explict -- say, for example: > > Craig> <html-el:test var="${logonForm.username}"/> > > Craig> instead of assuming that you could just use username and "know" that it > Craig> was resolved against the form bean in the surrounding scope. The property > Craig> name can either be inferred from the expression (i.e. after the first > Craig> period), or we could allow an optional "property" attribute that would > Craig> provide the field name for the rendered <input> field. > > I'm very hesitant to start parsing the EL string, as there's a lot of different > ways to form a legal expression, and I don't want to try to restrict the form > of the EL expression in these situations. > > We could of course have the "var" attribute be an EL to get the current value, > and have the "property" attribute be the "name" attribute in the generated > HTML, but then you have a disconnect between the value and the name, whereas > the current "name/property" pair allows a clean specification of both the > current value and the request parameter name. > > Craig> For indexed things, remember that the subscript in an EL expression can be > Craig> a variable. So something like this should work, where "customers" is an > Craig> array of customer objects, and we're inside a form with a field per > Craig> customer account number: > > Craig> <c:forEach var="customer" items="customers" varStatus="status"> > Craig> <html-el:text var="${customer.id}" > Craig> property="customers[${status.index}]"/> > Craig> </c:forEach> > > Craig> could do the trick, as long as you scanned both the "var" and "property" > Craig> attributes for expressions. > > Yes, I had considered the array index possibility. This will provide more > flexibility, allowing the case of two nested "iterate" tags, and you want the > "property" attribute of the HTML tag to come from the OUTER iterate tag (which > someone on "struts-user" just asked about today). > > However, in the general case, we're still having the users specify more, and > redundant information, just to avoid the use of the "name/property" pair. > > I guess we could provide two ways to do this: > > If the "name" attribute is present, the "name" and "property" are combined as > usual. However, if the "var" attribute is present, in place of the "name" > attribute, then the "var" value is used for the current value, and the > "property" attribute is used as the entire "name" attribute (of the generated > HTML). The convention (see JSTL spec 2.2.1) is to use the name "var" for attributes that export information. As I do not think <html-el:text/> should do any export things, we could simplify Craig's example as follows: <c:forEach items="customers" varStatus="status"> <html-el:text property="customers[${status.index}].id"/> </c:forEach> Where we are only interested in the current iteration index evaluated by an EL engine at run time and no changes are needed in the action codes. Will it be possible to keep the semantics of name/property attributes and drop the "indexed" attribute when the EL engine is available? Jing > > (It's certainly confusing to have the "name" attribute mean two different > things, one in JSP, and the other in HTML). > > Unfortunately, a change like this will require changing the base Struts tag. > In the case of "CheckboxTag" (and probably others), the current value lookup is > done directly in its "doStartTag()" method, with no comparison of "value" > against null check to bypass it (which is the case in other tags, like "size" > and "message", for instance). > > -- > =================================================================== > David M. Karr ; Java/J2EE/XML/Unix/C++ > [EMAIL PROTECTED] > > > -- > To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> > For additional commands, e-mail: <mailto:[EMAIL PROTECTED]> > > -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>