You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by "Hudson (JIRA)" <ji...@apache.org> on 2010/10/24 12:27:26 UTC

[jira] Commented: (WICKET-2772) Generate wicketpath attribute for RadioChoice

    [ https://issues.apache.org/jira/browse/WICKET-2772?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12924304#action_12924304 ] 

Hudson commented on WICKET-2772:
--------------------------------

Integrated in Apache Wicket 1.5.x #449 (See [https://hudson.apache.org/hudson/job/Apache%20Wicket%201.5.x/449/])
    WICKET-2776 Enhancing RadioChoice input items with individual title and css class attributes

Merge from 1.4.x:
and WICKET-2772
Issue: WICKET-2776
Files Changed
MODIFY /wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/markup/html/form/RadioChoice.java

ASF	#922649	Sat Mar 13 13:50:47 EST 2010	jdonnerstag	 added additional attributes to allow for index dependent attributes
Issue: WICKET-2776
Files Changed
MODIFY /wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/markup/html/form/RadioChoice.java


> Generate wicketpath attribute for RadioChoice
> ---------------------------------------------
>
>                 Key: WICKET-2772
>                 URL: https://issues.apache.org/jira/browse/WICKET-2772
>             Project: Wicket
>          Issue Type: Bug
>          Components: wicket
>    Affects Versions: 1.4.7
>            Reporter: Julian Sinai
>            Assignee: Juergen Donnerstag
>            Priority: Minor
>             Fix For: 1.4.8, 1.5-M1
>
>
> Wicket has a convenient feature to make using Selenium IDE easy to use. By adding getDebugSettings().setOutputComponentPath(true) to your application, the wicketpath attribute is emitted.
> Unfortunately, that does not hold for the radios inside a RadioChoice because they are not proper Components.
> Also unfortunately, RadioChoice.onComponentTagBody() is final.
> The result is that you either have to write additional xpath selectors, or clone RadioChoice and extend AjaxFormChoiceComponentUpdatingBehavior.
> The following code, added to RadioChoice.onComponentTagBody(), solves the problem. It is similar to the same code in Component, but appends a bit more to the path for the input tags:
> if (getApplication().getDebugSettings().isOutputComponentPath())
> {
> 	String path = getPageRelativePath();
> 	path = path.replace("_", "__");
> 	path = path.replace(":", "_");
> 	buffer.append(" wicketpath=\"")
> 	.append(path)
> 	.append("_input_")
> 	.append(index)
> 	.append("\"");
> }
> The full code for RadioChoice.onComponentTagBody() is as follows:
> 	@Override
> 	protected final void onComponentTagBody(final MarkupStream markupStream,
> 		final ComponentTag openTag)
> 	{
> 		// Iterate through choices
> 		final List<? extends T> choices = getChoices();
> 		// Buffer to hold generated body
> 		final AppendingStringBuffer buffer = new AppendingStringBuffer((choices.size() + 1) * 70);
> 		// The selected value
> 		final String selected = getValue();
> 		// Loop through choices
> 		for (int index = 0; index < choices.size(); index++)
> 		{
> 			// Get next choice
> 			final T choice = choices.get(index);
> 			Object displayValue = getChoiceRenderer().getDisplayValue(choice);
> 			Class<?> objectClass = (displayValue == null ? null : displayValue.getClass());
> 			// Get label for choice
> 			String label = "";
> 			if (objectClass != null && objectClass != String.class)
> 			{
> 				final IConverter converter = getConverter(objectClass);
> 				label = converter.convertToString(displayValue, getLocale());
> 			}
> 			else if (displayValue != null)
> 			{
> 				label = displayValue.toString();
> 			}
> 			// If there is a display value for the choice, then we know that the
> 			// choice is automatic in some way. If label is /null/ then we know
> 			// that the choice is a manually created radio tag at some random
> 			// location in the page markup!
> 			if (label != null)
> 			{
> 				// Append option suffix
> 				buffer.append(getPrefix());
> 				String id = getChoiceRenderer().getIdValue(choice, index);
> 				final String idAttr = getMarkupId() + "-" + id;
> 				boolean enabled = isEnabledInHierarchy() && !isDisabled(choice, index, selected);
> 				// Add radio tag
> 				buffer.append("<input name=\"")
> 					.append(getInputName())
> 					.append("\"")
> 					.append(" type=\"radio\"")
> 					.append((isSelected(choice, index, selected) ? " checked=\"checked\"" : ""))
> 					.append((enabled ? "" : " disabled=\"disabled\""))
> 					.append(" value=\"")
> 					.append(id)
> 					.append("\" id=\"")
> 					.append(idAttr)
> 					.append("\"");
> 				// Should a roundtrip be made (have onSelectionChanged called)
> 				// when the option is clicked?
> 				if (wantOnSelectionChangedNotifications())
> 				{
> 					CharSequence url = urlFor(IOnChangeListener.INTERFACE);
> 					Form<?> form = findParent(Form.class);
> 					if (form != null)
> 					{
> 						RequestContext rc = RequestContext.get();
> 						if (rc.isPortletRequest())
> 						{
> 							// restore url back to real wicket path as its going to be interpreted
> 							// by the form itself
> 							url = ((PortletRequestContext)rc).getLastEncodedPath();
> 						}
> 						buffer.append(" onclick=\"").append(form.getJsForInterfaceUrl(url)).append(
> 							";\"");
> 					}
> 					else
> 					{
> 						// TODO: following doesn't work with portlets, should be posted to a dynamic
> 						// hidden form
> 						// with an ActionURL or something
> 						// NOTE: do not encode the url as that would give
> 						// invalid JavaScript
> 						buffer.append(" onclick=\"window.location.href='")
> 							.append(url)
> 							.append(
> 								(url.toString().indexOf('?') > -1 ? "&amp;" : "?") + getInputName())
> 							.append("=")
> 							.append(id)
> 							.append("';\"");
> 					}
> 				}
> 				//  ADDED BY JULIAN TO OUTPUT THE WICKET:PATH ATTRIBUTE TO EASE SELENIUM TESTING.
> 				if (getApplication().getDebugSettings().isOutputComponentPath())
> 				{
> 					String path = getPageRelativePath();
> 					path = path.replace("_", "__");
> 					path = path.replace(":", "_");
> 					buffer.append(" wicketpath=\"")
> 					.append(path)
> 					.append("_input_")
> 					.append(index)
> 					.append("\"");
> 				}
> 				buffer.append("/>");
> 				// Add label for radio button
> 				String display = label;
> 				if (localizeDisplayValues())
> 				{
> 					display = getLocalizer().getString(label, this, label);
> 				}
> 				final CharSequence escaped;
> 				if (getEscapeModelStrings())
> 				{
> 					escaped = Strings.escapeMarkup(display, false, true);
> 				}
> 				else
> 				{
> 					escaped = display;
> 				}
> 				buffer.append("<label for=\"").append(idAttr).append("\">").append(escaped).append(
> 					"</label>");
> 				// Append option suffix
> 				buffer.append(getSuffix());
> 			}
> 		}
> 		// Replace body
> 		replaceComponentTagBody(markupStream, openTag, buffer);
> 	}

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.