//Binding
public class CondBinding extends AbstractBinding {
private final Binding conditionBinding;
private final Binding trueBinding;
private final Binding falseBinding;
private final TypeCoercer resolver;
public CondBinding(Binding conditionBinding, Binding trueBinding,
Binding falseBinding, TypeCoercer resolver) {
this.trueBinding = trueBinding;
this.falseBinding = falseBinding;
this.conditionBinding = conditionBinding;
this.resolver = resolver;
}
@Override
public Object get() {
String valueTrue = resolver.coerce(trueBinding.get(), String.class);
String valueFalse = resolver.coerce(falseBinding.get(), String.class);
Boolean condition = resolver.coerce(conditionBinding.get(), Boolean.class);
return condition != null && condition ? valueTrue : valueFalse;
}
}
//Factory
public class CondBindingFactory implements BindingFactory {
private static final String DELIMETER = "\\s*,\\s*";
private static final String DEFAULT_VALUE_PREFIX = "literal";
private static final String DEFAULT_CONDITION_PREFIX = "prop";
private final BindingSource bindingSource;
private final TypeCoercer resolver;
public CondBindingFactory(BindingSource bindingSource, TypeCoercer
resolver) {
this.bindingSource = bindingSource;
this.resolver = resolver;
}
@Override
public Binding newBinding(String description, ComponentResources
container, ComponentResources component, String expression, Location
location) {
String[] parts = expression.split(DELIMETER, 3);
if (parts.length < 3) {
return bindingSource.newBinding(description, container, component,
"prop", expression, location);
}
String condition = parts[0];
String valueTrue = parts[1];
String valueFalse = parts[2];
return new CondBinding(makeBinding(condition, DEFAULT_CONDITION_PREFIX,
container, description),
makeBinding(valueTrue, DEFAULT_VALUE_PREFIX, container, description),
makeBinding(valueFalse, DEFAULT_VALUE_PREFIX, container, description),
resolver);
}
private Binding makeBinding(String expression, String defaultPrefix,
ComponentResources container, String description) {
String prefix = defaultPrefix;
String reference = "";
if (!StringUtils.isEmpty(expression)) {
String[] parts = expression.split("\\s*:\\s*", 1);
prefix = parts.length == 2 ? parts[0] : defaultPrefix;
reference = parts.length == 2 ? parts[1] : parts[0];
}
return bindingSource.newBinding(description, container, prefix, reference);
}
}
//Contribution in AppModule
public static void contributeBindingSource(MappedConfiguration<String,
BindingFactory> configuration,
BindingSource bindingSource, TypeCoercer coercer) {
configuration.add("cond", new CondBindingFactory(bindingSource, coercer));
}
//Usage
${cond:isActive, literal:active, literal:notActive}
But for CSS classes and boolean values its better to use something like
that:
<div class="active_${isActive}"/>
/*Active css class*/
.active_true {}
/*Unactive css class*/
.active_false {}
17.11.2013 18:30, Matthias пишет:
Hi, if theres something in tapestry for inline conditional
expressions? I think of something like
<a href="www.google.com" class="${isActive ? 'active' :
'notActive'}">google</a>
I found nothing like that, but i loved to have it.
Thanks in advance
Matthias
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org
--
Best regards,
Michael Gagauz
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org