Wiki Markup |
---|
{float:right|background=#eee}
{contentbylabel:title=Related Articles|showLabels=false|showSpace=false|space=@self|labels=configuration}
{float} |
Symbols
Symbols are named configuration settings for Tapestry IOC-based services. Tapestry provides mechanisms for easy access to symbols from within such services.
Div |
---|
style | float:right |
---|
title | Related Articles |
---|
class | aui-label |
---|
|
Content by Label |
---|
showLabels | false |
---|
showSpace | false |
---|
title | Related Articles |
---|
cql | label = "configuration" and space = currentSpace() |
---|
|
|
Syntax
The syntax of symbols is based on Ant expressions. That is, the name is surrounded by ${ and } characters:
Code Block |
---|
${some.symbol.name}
|
The value on the inside is the symbol name. By convention, the symbol name is segmented with periods (for example, "tapestry.production-mode").
...
For example:
Code Block |
---|
|
public static MyService build(
@InjectService("${some-service-id}") Collaborator collab)
{
return . . . ;
} |
...
You may also inject symbol values. For example, if you are interested in whether the application is in production mode or developer mode:
Code Block |
---|
|
public class MyService implements MyServiceInterface
{
public MyService(@Value("${tapestry.production-mode}") boolean productionMode, ...)
{
if (productionMode) {
. . .
|
...
As an alternative, the @Symbol annotation, may be used:
Code Block |
---|
|
public class MyService implements MyServiceInterface
{
public MyService(@Symbol(SymbolConstants.PRODUCTION_MODE) boolean productionMode, ...)
{
if (productionMode) {
. . .
|
...
From the previous example:
Code Block |
---|
|
public void contributeApplicationDefaults(MappedConfiguration<String, String> configuration)
{
configuration.add("some-service-id", "WackyCollaborator");
} |
...
It is possible and valid to define one symbol in terms of one or more other symbols.
Code Block |
---|
|
public void contributeFactoryDefaults(MappedConfiguration<String, String> configuration)
{
configuration.add("report.url", "http://${report.host}:${report.port}/${report.path}");
configuration.add("report.host", "www.myreportsite.com");
configuration.add("report.port", "80");
configuration.add("report.path", "/report.cgi");
} |
...
Tapestry checks that no symbol is directly or indirectly dependent on itself. For example, the following contribution is illegal:
Code Block |
---|
|
public void contributeApplicationDefaults(MappedConfiguration<String, String> configuration)
{
configuration.add("report.path", "${report.url}/report.cgi");
} |
When the report.url
is referenced, an exception will be thrown with the message: Symbol 'report.path' is defined in terms of itself (report.path --> report.url --> report.path).