You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by "Barry Books (JIRA)" <ji...@apache.org> on 2016/02/22 21:59:18 UTC

[jira] [Commented] (TAP5-2099) Update parameters bound to literal: or symbol: from a mixin

    [ https://issues.apache.org/jira/browse/TAP5-2099?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15157686#comment-15157686 ] 

Barry Books commented on TAP5-2099:
-----------------------------------

This is still an issue in 5.4. The question is what should happen when a literal or a symbol is provided to a Component parameter and then something tries to update it. Currently both literal and symbol extend AbstractBinding which throws an exception when it's set method is called. I think both of these bindings should override the default set method with a method that does nothing. In the case of something like this

@Parameter(BindingConstants.SYMBOL + ":" + ComponentParameterConstants.GRID_ROWS_PER_PAGE)
private int rowsPerPage;

There is no purpose in informing the symbol provider that something has written the field it's value is assigned to and the property should not be read only just because a constant has been assigned to it.

The following code overrides symbol and demonstrates this:

	public static void contributeBindingSource(MappedConfiguration<String, BindingFactory> configuration, 
			final SymbolSource symbolSource) {
		configuration.override(BindingConstants.SYMBOL, new BindingFactory() {
			
			@Override
			public Binding newBinding(String description, ComponentResources container, ComponentResources component,
					final String expression, final Location location) {
								
				return new AbstractBinding(location) {
					
					@Override
					public void set(Object value) {
					}
					
					@Override
					public Object get() {
						return symbolSource.valueForSymbol(expression);
					}
				};
			}
		});
	}

> Update parameters bound to literal: or symbol: from a mixin
> -----------------------------------------------------------
>
>                 Key: TAP5-2099
>                 URL: https://issues.apache.org/jira/browse/TAP5-2099
>             Project: Tapestry 5
>          Issue Type: Improvement
>    Affects Versions: 5.3.6
>            Reporter: Lance
>              Labels: bulk-close-candidate
>         Attachments: TAP52099-1.patch
>
>
> Currently, I cannot update a component component parameter that is initialized with a literal: or symbol: binding from a mixin. If I try to @BindParameter the param and change it's value, I get a "Binding %s is read-only" exception (originating from AbstractBinding).
> I propose that literal and symbol bindings are sourced from a PerThreadValue that can be updated by a mixin.
> My original need for this was to create a "SinglePage" mixin for the Grid component which would set the rowsPerPage parameter to Integer.MAX_VALUE. I can't currently do this because by default, the parameter is a symbol: binding.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)