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 ? "&" : "?") + 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.