001// Licensed under the Apache License, Version 2.0 (the "License"); 002// you may not use this file except in compliance with the License. 003// You may obtain a copy of the License at 004// 005// http://www.apache.org/licenses/LICENSE-2.0 006// 007// Unless required by applicable law or agreed to in writing, software 008// distributed under the License is distributed on an "AS IS" BASIS, 009// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 010// See the License for the specific language governing permissions and 011// limitations under the License. 012 013package org.apache.tapestry5; 014 015import org.apache.tapestry5.corelib.base.AbstractField; 016import org.apache.tapestry5.corelib.components.AjaxFormLoop; 017import org.apache.tapestry5.corelib.components.BeanDisplay; 018import org.apache.tapestry5.corelib.components.BeanEditForm; 019import org.apache.tapestry5.corelib.components.BeanEditor; 020import org.apache.tapestry5.corelib.components.Errors; 021import org.apache.tapestry5.corelib.mixins.FormGroup; 022import org.apache.tapestry5.http.TapestryHttpConstants; 023import org.apache.tapestry5.http.TapestryHttpSymbolConstants; 024import org.apache.tapestry5.http.services.BaseURLSource; 025import org.apache.tapestry5.http.services.CorsHandler; 026import org.apache.tapestry5.http.services.CorsHandlerHelper; 027import org.apache.tapestry5.http.services.CorsHttpServletRequestFilter; 028import org.apache.tapestry5.internal.services.AssetDispatcher; 029import org.apache.tapestry5.internal.services.ComponentDependencyRegistry; 030import org.apache.tapestry5.internal.services.rest.DefaultOpenApiDescriptionGenerator; 031import org.apache.tapestry5.modules.NoBootstrapModule; 032import org.apache.tapestry5.services.Html5Support; 033import org.apache.tapestry5.services.assets.AssetPathConstructor; 034import org.apache.tapestry5.services.assets.ResourceMinimizer; 035import org.apache.tapestry5.services.compatibility.Trait; 036import org.apache.tapestry5.services.javascript.JavaScriptStack; 037import org.apache.tapestry5.services.pageload.PageClassLoaderContextManager; 038import org.apache.tapestry5.services.rest.OpenApiDescriptionGenerator; 039 040/** 041 * Defines the names of symbols used to configure Tapestry. 042 * 043 * @see org.apache.tapestry5.ioc.services.SymbolSource 044 */ 045public class SymbolConstants 046{ 047 /** 048 * A comma separated list of execution modes used to control how the application is initialized. 049 * Each modes can contribute a list (comma separated) of Module classes to be loaded during startup, 050 * the order in which they appear is preserved. 051 * The default value is: <code>production</code>. 052 * This is an alias for {@link TapestryHttpSymbolConstants#EXECUTION_MODE}. 053 */ 054 public static final String EXECUTION_MODE = TapestryHttpSymbolConstants.EXECUTION_MODE; 055 /** 056 * Indicates whether Tapestry is running in production mode or developer mode. This affects a large 057 * number of Tapestry behaviors related to performance and security, including how exceptions are 058 * reported, whether far-future expire headers are emitted, whether JavaScript files may be combined, 059 * whether JSON is compressed, whether component field and parameter values are shadowed to instance 060 * variables (to assist with debugging), and more. 061 * 062 * This is an alias to {@link TapestryHttpSymbolConstants#PRODUCTION_MODE}. 063 */ 064 public static final String PRODUCTION_MODE = TapestryHttpSymbolConstants.PRODUCTION_MODE; 065 066 /** 067 * A version of {@link TapestryHttpSymbolConstants#PRODUCTION_MODE} as a symbol reference. This can be used as the default value 068 * of other symbols, to indicate that their default matches whatever PRODUCTION_MODE is set to, which is quite 069 * common. 070 * 071 * @since 5.2.0 072 */ 073 public static final String PRODUCTION_MODE_VALUE = String.format("${%s}", TapestryHttpSymbolConstants.PRODUCTION_MODE); 074 075 /** 076 * The list of locales supported by the application; locales identified in the incoming request are "narrowed" to 077 * one of these values. The first locale name in the list is the default locale used when no proper match can be 078 * found. 079 */ 080 public static final String SUPPORTED_LOCALES = "tapestry.supported-locales"; 081 082 /** 083 * Controls whether whitespace is compressed by default in templates, or left as is. The factory default is to 084 * compress whitespace. (This can also be overridden using the xml:space attribute inside template elements.) 085 */ 086 public static final String COMPRESS_WHITESPACE = "tapestry.compress-whitespace"; 087 088 /** 089 * Time interval defining how often Tapestry will check for updates to local files (including classes). 090 * Starting with 5.3, this is only used when not running in production mode. The default is "1 s" 091 * (one second), which is appropriate for development. With Tapestry 5.2 and earlier this number 092 * should be raised in a production environment. 093 */ 094 public static final String FILE_CHECK_INTERVAL = "tapestry.file-check-interval"; 095 096 /** 097 * Time interval that sets how long Tapestry will wait to obtain the exclusive lock needed to check local files. The 098 * default is "50 ms". Starting with 5.3, this is only used when not running in production mode. 099 */ 100 public static final String FILE_CHECK_UPDATE_TIMEOUT = "tapestry.file-check-update-timeout"; 101 102 /** 103 * The version number of the core Tapestry framework, or UNKNOWN if the version number is not available (which 104 * should only occur when developing Tapestry). 105 * This is an alias for {@link TapestryHttpSymbolConstants#TAPESTRY_VERSION}. 106 */ 107 public static final String TAPESTRY_VERSION = TapestryHttpSymbolConstants.TAPESTRY_VERSION; 108 109 /** 110 * The location of the application-wide component messages catalog, relative to the web application context. This 111 * will normally be <code>WEB-INF/app.properties</code>. 112 */ 113 public static final String APPLICATION_CATALOG = "tapestry.app-catalog"; 114 115 /** 116 * The charset used when rendering page markup; the charset is also used as the request encoding when handling 117 * incoming requests. The default is "UTF-8". 118 * This is an alias for {@link TapestryHttpSymbolConstants#CHARSET}. 119 */ 120 public static final String CHARSET = TapestryHttpSymbolConstants.CHARSET; 121 122 /** 123 * Used as the default for the Form's autofocus and clientValidation parameters. If overridden to "false", then 124 * Forms will not (unless explicitly specified) use client validation or autofocus, which in turn, means that most 125 * pages with Forms will not make use of the Tapestry JavaScript stack. 126 */ 127 public static final String FORM_CLIENT_LOGIC_ENABLED = "tapestry.form-client-logic-enabled"; 128 129 /** 130 * Name of page used to report exceptions; the page must implement 131 * {@link org.apache.tapestry5.services.ExceptionReporter}. 132 * This is used by the default exception report handler service. 133 */ 134 public static final String EXCEPTION_REPORT_PAGE = "tapestry.exception-report-page"; 135 136 /** 137 * Identifies the default persistence strategy for all pages that do not provide an override (using this value as 138 * {@link org.apache.tapestry5.annotations.Meta key}). 139 * 140 * @since 5.1.0.0 141 */ 142 public static final String PERSISTENCE_STRATEGY = "tapestry.persistence-strategy"; 143 144 /** 145 * Minimum output stream size, in bytes, before output is compressed using GZIP. Shorter streams are not compressed. 146 * Tapestry buffers this amount and switches to a GZIP output stream as needed. The default is "100". 147 * This is an alias to {@link TapestryHttpSymbolConstants#MIN_GZIP_SIZE}. 148 * 149 * @see TapestryHttpSymbolConstants#GZIP_COMPRESSION_ENABLED 150 * @since 5.1.0.0 151 */ 152 public static final String MIN_GZIP_SIZE = TapestryHttpSymbolConstants.MIN_GZIP_SIZE; 153 154 /** 155 * Version number of the application. Prior to 5.4, this version number was integrated into asset URLs. Starting 156 * with 5.4, a checksum of the individual asset's content is used instead, and this version number is only used 157 * for documentation purposes; it appears in the default exception report page, for example. 158 * 159 * The default value is "0.0.1". In 5.3 and earlier, the default value was a random hexadecimal string. 160 * 161 * This is an alias to {@link TapestryHttpSymbolConstants#APPLICATION_VERSION}. 162 * 163 * @see AssetDispatcher 164 * @see AssetPathConstructor 165 * @since 5.1.0.0 166 */ 167 public static final String APPLICATION_VERSION = TapestryHttpSymbolConstants.APPLICATION_VERSION; 168 169 /** 170 * Used to omit the normal Tapestry framework generator meta tag. The meta tag is rendered by default, but clients 171 * who do not wish to advertise their use of Tapestry may set this symbol to "true". 172 * 173 * @since 5.1.0.0 174 */ 175 public static final String OMIT_GENERATOR_META = "tapestry.omit-generator-meta"; 176 177 /** 178 * If "true" (the default) then GZip compression is enabled for dynamic requests and for static assets. If you are 179 * using a server that handles GZip compression for you, or you don't want to use the extra processing power 180 * necessary to GZIP requests, then override this to "false". 181 * This is an alias to {@link TapestryHttpSymbolConstants#GZIP_COMPRESSION_ENABLED}. 182 * 183 * @see TapestryHttpSymbolConstants#MIN_GZIP_SIZE 184 * @see org.apache.tapestry5.http.services.ResponseCompressionAnalyzer 185 * @see org.apache.tapestry5.http.services.CompressionAnalyzer 186 * @since 5.1.0.0 187 */ 188 public static final String GZIP_COMPRESSION_ENABLED = TapestryHttpSymbolConstants.GZIP_COMPRESSION_ENABLED; 189 190 /** 191 * If "true" (which itself defaults to production mode), then the {@link org.apache.tapestry5.annotations.Secure} 192 * annotation will be honored. If "false" (i.e., development mode), then the annotation and related HTTP/HTTPS 193 * logic is ignored. 194 * 195 * @since 5.1.0.1 196 */ 197 public static final String SECURE_ENABLED = "tapestry.secure-enabled"; 198 199 /** 200 * If "true" (the default), then the {@link org.apache.tapestry5.services.PersistentLocale} will be encoded into the 201 * {@link org.apache.tapestry5.http.Link} path by the {@link org.apache.tapestry5.services.ComponentEventLinkEncoder} 202 * service. If overridden to "false" this does not occur, but you should provide a 203 * {@link org.apache.tapestry5.services.LinkCreationListener2} (registered with the 204 * {@link org.apache.tapestry5.services.LinkCreationHub}) in order to add the locale as a query parameter (or 205 * provide some alternate means of persisting the locale between requests). 206 * 207 * @since 5.1.0.1 208 */ 209 public static final String ENCODE_LOCALE_INTO_PATH = "tapestry.encode-locale-into-path"; 210 211 /** 212 * If "true" then JavaScript files in a {@link JavaScriptStack} will be combined into a single virtual JavaScript 213 * file. Defaults to "true" in production mode. 214 * 215 * @since 5.1.0.2 216 */ 217 public static final String COMBINE_SCRIPTS = "tapestry.combine-scripts"; 218 219 220 /** 221 * The default time interval that cookies created by Tapestry will be kept in the client web browser. The default is 222 * "7 d" (that is, seven days). 223 * 224 * @since 5.2.0 225 */ 226 public static final String COOKIE_MAX_AGE = "tapestry.default-cookie-max-age"; 227 228 /** 229 * The logical name of the start page, the page that is rendered for the root URL. 230 * 231 * @since 5.2.0 232 */ 233 public static final String START_PAGE_NAME = "tapestry.start-page-name"; 234 235 /** 236 * The default stylesheet automatically inserted into every rendered HTML page when 237 * no Bootstrap version is enabled (i.e both {@link Trait#BOOTSTRAP_3} and {@link Trait#BOOTSTRAP_4} 238 * traits are disabled, something done by {@linkplain NoBootstrapModule}). 239 * 240 * It was deprecated in 5.4 with no replacement (the stylesheet is now associated with the core {@link JavaScriptStack}.), 241 * but undeprecated in 5.5.0 with the caveat described above. 242 * 243 * @see NoBootstrapModule 244 * @since 5.2.0 245 */ 246 public static final String DEFAULT_STYLESHEET = "tapestry.default-stylesheet"; 247 248 /** 249 * The Asset path to the embedded copy of script.aculo.us packaged with Tapestry. 250 * 251 * @since 5.2.0 252 */ 253 public static final String SCRIPTACULOUS = "tapestry.scriptaculous"; 254 255 /** 256 * The Asset path to the embedded datepicker. 257 * 258 * @since 5.2.0 259 */ 260 public static final String DATEPICKER = "tapestry.datepicker"; 261 262 /** 263 * If "true", then JSON page initialization content is compressed; if "false" 264 * then extra white space is added (pretty printing). Defaults to "true" in production mode. 265 * 266 * @since 5.2.0 267 */ 268 public static final String COMPACT_JSON = "tapestry.compact-json"; 269 270 /** 271 * If "true" and {@link TapestryHttpSymbolConstants#PRODUCTION_MODE} is off, comments will be rendered before and after the rendering of any 272 * component 273 * allowing more visibility into which components rendered which markup. Defaults to "false". Component render 274 * tracing may be 275 * enabled per-request by the presence of a request parameter "t:component-trace" with a value of "true". 276 * 277 * @since 5.2.5 278 */ 279 public static final String COMPONENT_RENDER_TRACING_ENABLED = "tapestry.component-render-tracing-enabled"; 280 281 /** 282 * The hostname that application should use when constructing an absolute URL. The default is "", i.e. an empty 283 * string, 284 * in which case system will use request.getServerName(). Not the same as environment variable HOSTNAME, but you can 285 * also 286 * contribute "$HOSTNAME" as the value to make it the same as the environment variable HOSTNAME. 287 * This is an alias to {@link TapestryHttpSymbolConstants#HOSTNAME}. 288 * 289 * @since 5.3 290 */ 291 public static final String HOSTNAME = TapestryHttpSymbolConstants.HOSTNAME; 292 293 /** 294 * The hostport that application should use when constructing an absolute URL. The default is "0", i.e. use the port 295 * value from 296 * the request. This is an alias to {@link TapestryHttpSymbolConstants#HOSTPORT}. 297 * 298 * @since 5.3 299 */ 300 public static final String HOSTPORT = TapestryHttpSymbolConstants.HOSTPORT; 301 302 /** 303 * The secure (https) hostport that application should use when constructing an absolute URL. The default is "0", 304 * i.e. use 305 * the value from the request. 306 * This is an alias to {@link TapestryHttpSymbolConstants#HOSTPORT_SECURE}. 307 * 308 * @since 5.3 309 */ 310 public static final String HOSTPORT_SECURE = TapestryHttpSymbolConstants.HOSTPORT_SECURE; 311 312 /** 313 * If "true", then resources (individually or when aggregated into stacks) will be minimized via the 314 * {@link ResourceMinimizer} service. If "false", then minification is disabled. Tracks production mode 315 * (minification is normally disabled in development mode). 316 * 317 * Note that Tapestry's default implementation of {@link ResourceMinimizer} does nothing; minification is provided 318 * by add-on libraries. 319 * 320 * @since 5.3 321 */ 322 public static final String MINIFICATION_ENABLED = "tapestry.enable-minification"; 323 324 /** 325 * If "true" then at the end of each request the 326 * {@link org.apache.tapestry5.http.services.SessionPersistedObjectAnalyzer} will be called on each session persisted 327 * object that was accessed during the request. 328 * 329 * This is provided as a performance enhancement for servers that do not use clustered sessions. 330 * 331 * The default is {@code true}, to preserve 5.2 behavior. For non-clustered applications (the majority), this value should be 332 * overridden to {@code false}. A future release of Tapestry may change the default. 333 * 334 * This is an alias to {@link TapestryHttpSymbolConstants#CLUSTERED_SESSIONS}. 335 * 336 * @since 5.3 337 */ 338 public static final String CLUSTERED_SESSIONS = TapestryHttpSymbolConstants.CLUSTERED_SESSIONS; 339 340 /** 341 * The name of a folder in which the Tapestry application executes. Prior to 5.3, a Tapestry application always responded to all 342 * URLs in the context under the context root; by setting this to the name of a folder, the T5 URLs will be inside that folder only, and should 343 * match a corresponding entry in the {@code web.xml} configuration file. This is useful when running multiple servlets within the same web application (such as when migrating 344 * from Tapestry 4 or some other framework, to Tapestry 5). 345 * Effectively, if this symbol is set to a value, that folder name will be placed after the context path 346 * (typically "/") and before the locale, page name, or other prefix. For example, if this symbol is set to "app", the {@code web.xml <url-pattern>} should be set to {@code /app/*}, and Tapestry will 347 * only be in invoked by the servlet container for requests inside the virtual {@code app} folder. 348 * 349 * This also affects the search for page templates (which are allowed within the web context). When set to a non-blank value, page templates are searched for in the folder, rather than in the root context. 350 * 351 * The default value is the empty string, which preserves Tapestry 5.2 behavior (and continues to be appropriate for most applications). 352 * 353 * Note that while Tapestry is case-insensitive, the servlet container is not, so the configured value must exactly match 354 * the folder name inside the {@code <url-parameter>} value, including case. 355 * 356 * @since 5.3 357 */ 358 public static final String APPLICATION_FOLDER = "tapestry.application-folder"; 359 360 /** 361 * Boolean value to indicate if every {@link org.apache.tapestry5.Asset} should be fully qualified or not. 362 * Default to <code>false</code> meaning no Asset URL will be fully qualified. 363 * 364 * @since 5.3 365 */ 366 public static final String ASSET_URL_FULL_QUALIFIED = "tapestry.asset-url-fully-qualified"; 367 368 /** 369 * Prefix to be used for all resource paths, used to recognize which requests are for assets. This value 370 * is appended to the context path and the (optional {@linkplain #APPLICATION_FOLDER application folder}. 371 * It may contain slashes, but should not begin or end with one. 372 * 373 * The default is "assets". 374 */ 375 public static final String ASSET_PATH_PREFIX = "tapestry.asset-path-prefix"; 376 377 378 /** 379 * Prefix used for all module resources. This may contain slashes, but should not being or end with one. 380 * Tapestry will create two {@link org.apache.tapestry5.http.services.Dispatcher}s from this: one for normal 381 * modules, the other for GZip compressed modules (by appending ".gz" to this value). 382 * 383 * The default is "modules". 384 * 385 * @since 5.4 386 */ 387 public static final String MODULE_PATH_PREFIX = "tapestry.module-path-prefix"; 388 389 /** 390 * Identifies the context path of the application, as determined from {@link javax.servlet.ServletContext#getContextPath()}. 391 * This is either a blank string or a string that starts with a slash but does not end with one. 392 * This is an alias to {@link TapestryHttpSymbolConstants#CONTEXT_PATH}. 393 * 394 * @since 5.4 395 */ 396 public static final String CONTEXT_PATH = TapestryHttpSymbolConstants.CONTEXT_PATH; 397 398 /** 399 * A passphrase used as the basis of hash-based message authentication (HMAC) for any object stream data stored on 400 * the client. The default phrase is the empty string, which will result in a logged runtime <em>error</em>. 401 * You should configure this to a reasonable value (longer is better) and ensure that all servers in your cluster 402 * share the same value (configuring this in code, rather than the command line, is preferred). 403 * 404 * @see org.apache.tapestry5.services.ClientDataEncoder 405 * @since 5.3.6 406 */ 407 public static final String HMAC_PASSPHRASE = "tapestry.hmac-passphrase"; 408 409 /** 410 * The root asset path for Twitter Bootstrap; if your application uses a modified version of Bootstrap, 411 * you can override this symbol to have Tapestry automatically use your version. The value should be a path 412 * to a folder (under "classpath:" or "context:") and should not include a trailing slash. 413 * 414 * @since 5.4 415 */ 416 public static final String BOOTSTRAP_ROOT = "tapestry.bootstrap-root"; 417 418 /** 419 * The root asset path for Font Awesome; if your application uses a modified version of it, 420 * you can override this symbol to have Tapestry automatically use your version. The value should be a path 421 * to a folder (under "classpath:" or "context:") and should not include a trailing slash. 422 * 423 * @since 5.5 424 */ 425 public static final String FONT_AWESOME_ROOT = "tapestry.font-awesome-root"; 426 427 /** 428 * Tapestry relies on an underlying client-side JavaScript infrastructure framework to handle DOM manipulation, 429 * event handling, and Ajax requests. Through Tapestry 5.3, the foundation was 430 * <a href="http://http://prototypejs.org/">Prototype</a>. In 5.4, support for 431 * <a href="http://jquery.org/">jQuery</a> has been added, and it is possible to add others. This symbol defines a value that is used to select 432 * a resource that is provided to the {@link org.apache.tapestry5.services.javascript.ModuleManager} service 433 * as a {@link org.apache.tapestry5.services.javascript.JavaScriptModuleConfiguration} to provide a specific implementation 434 * of the {@code t5/core/dom} module. Tapestry 5.4 directly supports "prototype" or "jquery". To support 435 * other foundation frameworks, override this symbol value and supply your own module configuration. 436 * 437 * In Tapestry 5.4, this defaults to "prototype" for compatibility with 5.3. This will likely change in 438 * 5.5 to default to "jquery". At some point in the future, Prototype support will no longer be present. 439 * 440 * @since 5.4 441 */ 442 public static final String JAVASCRIPT_INFRASTRUCTURE_PROVIDER = "tapestry.javascript-infrastructure-provider"; 443 444 /** 445 * If true (the default), then Tapestry will apply locking semantics around access to the {@link javax.servlet.http.HttpSession}. 446 * Reading attribute names occurs with a shared read lock; getting or setting an attribute upgrades to an exclusive write lock. 447 * This can tend to serialize threads when a number of simultaneous (Ajax) requests from the client arrive ... however, 448 * many implementations of HttpSession are not thread safe, and often mutable objects are stored in the session and shared 449 * between threads. Leaving this on the default will yield a more robust application; setting it to false may speed 450 * up processing for more Ajax intensive applications (but care should then be given to ensuring that objects shared inside 451 * the session are themselves immutable or thread-safe). 452 * 453 * This is an alias to {@link TapestryHttpSymbolConstants#SESSION_LOCKING_ENABLED}. 454 * 455 * @since 5.4 456 */ 457 public static final String SESSION_LOCKING_ENABLED = TapestryHttpSymbolConstants.SESSION_LOCKING_ENABLED; 458 459 /** 460 * If true (the default), then Tapestry will automatically include the "core" stack in all 461 * pages. 462 * 463 * @see <a href="https://issues.apache.org/jira/browse/TAP5-2169">TAP5-2169</a> 464 * @since 5.4 465 */ 466 public static final String INCLUDE_CORE_STACK = "tapestry.include-core-stack"; 467 468 /** 469 * Defines the CSS class that will be given to HTML element (usually a div) <div> generated by 470 * the {@linkplain FormGroup} mixin and the 471 * {@linkplain BeanEditForm} and {@linkplain BeanEditor} 472 * components surrounding the label and the field. If the value isn't 473 * {@code form-group}, the div will have {@code class="form-group [value]}. 474 * The default value is <code>form-group</code>. 475 * 476 * @see <a href="https://issues.apache.org/jira/browse/TAP5-2182">TAP5-2182</a> 477 * @since 5.4 478 */ 479 public static final String FORM_GROUP_WRAPPER_CSS_CLASS = "tapestry.form-group-wrapper-css-class"; 480 481 /** 482 * Defines the name of the HTML element that will surround the HTML form field generated by 483 * the {@linkplain FormGroup} mixin and the {@linkplain BeanEditForm} and {@linkplain BeanEditor}. 484 * If this symbol is null or an empty string, no element will be generated surrouding the 485 * form field. The default value is the empty string (no wrapping). 486 * 487 * @see <a href="https://issues.apache.org/jira/browse/TAP5-2182">TAP5-2182</a> 488 * @see #FORM_GROUP_FORM_FIELD_WRAPPER_ELEMENT_CSS_CLASS 489 * @since 5.4 490 */ 491 public static final String FORM_GROUP_FORM_FIELD_WRAPPER_ELEMENT_NAME = "tapestry.form-group-form-field-wrapper-element-name"; 492 493 /** 494 * Defines the CSS class of the HTML element generated by 495 * the {@linkplain FormGroup} mixin and the {@linkplain BeanEditForm} and {@linkplain BeanEditor}. 496 * when {@linkplain #FORM_GROUP_FORM_FIELD_WRAPPER_ELEMENT_NAME} is not set to null or the empty string. 497 * The default value is the empty string (no CSS class added). 498 * 499 * @see <a href="https://issues.apache.org/jira/browse/TAP5-2182">TAP5-2182</a> 500 * @since 5.4 501 */ 502 public static final String FORM_GROUP_FORM_FIELD_WRAPPER_ELEMENT_CSS_CLASS = "tapestry.form-group-form-field-wrapper-element-css-class"; 503 504 /** 505 * Defines the CSS class that will be given to <label> element generated by 506 * the {@linkplain FormGroup} mixin and the 507 * {@linkplain BeanEditForm} and {@linkplain BeanEditor} 508 * components. The default value is <code>control-label</code>. 509 * 510 * @see <a href="https://issues.apache.org/jira/browse/TAP5-2182">TAP5-2182</a> 511 * @since 5.4 512 */ 513 public static final String FORM_GROUP_LABEL_CSS_CLASS = "tapestry.form-group-label-css-class"; 514 515 /** 516 * Defines the CSS class that will be given to form field components which are 517 * {@linkplain AbstractField} subclasses. The default value is <code>form-control</code>. 518 * 519 * @see <a href="https://issues.apache.org/jira/browse/TAP5-2182">TAP5-2182</a> 520 * @since 5.4 521 */ 522 public static final String FORM_FIELD_CSS_CLASS = "tapestry.form-field-css-class"; 523 524 /** 525 * Defines the CSS class that will be given to the <dl> HTML element generated by 526 * {@linkplain BeanDisplay}. The default value is <code>well dl-horizontal</code>. 527 * 528 * @since 5.5 529 */ 530 public static final String BEAN_DISPLAY_CSS_CLASS = "tapestry.bean-display-css-class"; 531 532 /** 533 * Defines the CSS class that will be given to the <div> HTML element generated by 534 * {@linkplain BeanEditor}/{@linkplain BeanEditForm} for boolean properties. 535 * The default value is <code>input-group</code>. 536 * 537 * @since 5.5 538 */ 539 public static final String BEAN_EDITOR_BOOLEAN_PROPERTY_DIV_CSS_CLASS = "tapestry.bean-editor-boolean-property-div-css-class"; 540 541 /** 542 * Defines the CSS class that will be given to the HTML element generated by 543 * {@linkplain Error}. If the value isn't <code>help-block</code>, the class attribute 544 * will be <code>help-block [symbol value]</code> 545 * The default value is <code>help-block</code>. 546 * 547 * @since 5.5 548 */ 549 public static final String ERROR_CSS_CLASS = "tapestry.error-css-class"; 550 551 /** 552 * Defines the CSS class that will be given to the add row link generated by 553 * {@linkplain AjaxFormLoop}. The default value is <code>btn btn-default btn-sm</code>. 554 * 555 * @since 5.5 556 */ 557 public static final String AJAX_FORM_LOOP_ADD_ROW_LINK_CSS_CLASS = "tapestry.ajax-form-loop-add-row-link-css-class"; 558 559 /** 560 * Defines the prefix of the CSS class that will be given to the outer <div> element generated by 561 * {@linkplain Errors}. The value of {@linkplain Errors}'s <code>class</code> parameter appended 562 * after the prefix and a space character. The default value is <code>alert-dismissable</code>. 563 * 564 * @since 5.5 565 */ 566 public static final String ERRORS_BASE_CSS_CLASS = "tapestry.errors-base-css-class"; 567 568 /** 569 * Defines the default value of the {@linkplain Errors}'s <code>class</code> parameter. 570 * The default value for this symbol is <code>alert alert-danger</code>. 571 * 572 * @since 5.5 573 */ 574 public static final String ERRORS_DEFAULT_CLASS_PARAMETER_VALUE = "tapestry.errors-default-class-parameter-value"; 575 576 /** 577 * Defines the CSS class that will be given to the close <button> generated by 578 * {@linkplain Errors}. The default value is <code>close</code>. 579 * 580 * @since 5.5 581 */ 582 public static final String ERRORS_CLOSE_BUTTON_CSS_CLASS = "tapestry.errors-close-button-css-class"; 583 584 /** 585 * Defines whether {@link java.text.DateFormat} instances created by Tapestry should be 586 * lenient or not by default. The default value is <code>false</code>. 587 * 588 * @since 5.4 589 */ 590 public static final String LENIENT_DATE_FORMAT = "tapestry.lenient-date-format"; 591 592 /** 593 * The directory to which exception report files should be written. The default is appropriate 594 * for development: {@code build/exceptions}, and should be changed for production. 595 * 596 * @see org.apache.tapestry5.services.ExceptionReporter 597 * @since 5.4 598 */ 599 600 public static final String EXCEPTION_REPORTS_DIR = "tapestry.exception-reports-dir"; 601 602 /** 603 * Defines whether {@link org.apache.tapestry5.internal.services.assets.CSSURLRewriter} will throw an exception when a CSS file 604 * references an URL which doesn't exist. The default value is <code>false</code>. 605 * 606 * @since 5.4 607 */ 608 public static final String STRICT_CSS_URL_REWRITING = "tapestry.strict-css-url-rewriting"; 609 610 /** 611 * When an asset (typically, a JavaScript module) is streamed without an explicit expiration header, then 612 * this value is sent as the {@code Cache-Control} header; the default is "max-age=60, must-revalidate". Setting 613 * max-age to a value above zero significantly reduces the number of client requests for module content, as client 614 * browsers will then cache previously downloaded versions. For normal assets, which are immutable, and fingerprinted with 615 * a content hash, there is no need to set max age, and instead, a far-future expiration date is provided. 616 * 617 * @since 5.4 618 */ 619 public static final String OMIT_EXPIRATION_CACHE_CONTROL_HEADER = "tapestry.omit-expiration-cache-control-header"; 620 621 /** 622 * Defines whether HTML5 features should be used. Value used in the default implementation of 623 * {@link Html5Support#isHtml5SupportEnabled()}. Default value: <code>false</code>. 624 * 625 * @see Html5Support#isHtml5SupportEnabled() 626 * @since 5.4 627 */ 628 public static final String ENABLE_HTML5_SUPPORT = "tapestry.enable-html5-support"; 629 630 /** 631 * A general switch for restrictive environments, such as Google App Engine, which forbid some useful operations, 632 * such as creating files or directories. Defaults to false. 633 * 634 * @since 5.4 635 */ 636 public static final String RESTRICTIVE_ENVIRONMENT = "tapestry.restrictive-environment"; 637 638 /** 639 * If true, then when a page includes any JavaScript, a {@code script} block is added to insert 640 * a pageloader mask into the page; the pageloader mask ensure that the user can't interact with the page 641 * until after the page is fully initialized. 642 * 643 * @since 5.4 644 */ 645 public static final String ENABLE_PAGELOADING_MASK = "tapestry.enable-pageloading-mask"; 646 647 /** 648 * Controls in what environment page preloading should occur. By default, preloading only occurs 649 * in production. 650 * 651 * @see org.apache.tapestry5.services.pageload.PagePreloader 652 * @see org.apache.tapestry5.services.pageload.PreloaderMode 653 * @since 5.4 654 */ 655 public static final String PRELOADER_MODE = "tapestry.page-preload-mode"; 656 657 /** 658 * Defines the OpenAPI version to be used in the generated OpenAPI description. 659 * Default value is <code>3.0.0</code>. 660 * @see DefaultOpenApiDescriptionGenerator 661 * @see OpenApiDescriptionGenerator 662 * @since 5.8.0 663 */ 664 public static final String OPENAPI_VERSION = "tapestry.openapi-version"; 665 666 /** 667 * Defines the title of this application in the generated OpenAPI description. No default value is provided. 668 * @see DefaultOpenApiDescriptionGenerator 669 * @see OpenApiDescriptionGenerator 670 * @since 5.8.0 671 */ 672 public static final String OPENAPI_TITLE = "tapestry.openapi-title"; 673 674 /** 675 * Defines the description of this application in the generated OpenAPI description. 676 * No default value is provided. 677 * @see DefaultOpenApiDescriptionGenerator 678 * @see OpenApiDescriptionGenerator 679 * @since 5.8.0 680 */ 681 public static final String OPENAPI_DESCRIPTION = "tapestry.openapi-description"; 682 683 /** 684 * Defines the version of this application in the generated OpenAPI description (i.e. info/version). 685 * No default value is provided. 686 * @see DefaultOpenApiDescriptionGenerator 687 * @see OpenApiDescriptionGenerator 688 * @since 5.8.0 689 */ 690 public static final String OPENAPI_APPLICATION_VERSION = "tapestry.openapi-application-version"; 691 692 /** 693 * Defines whether the OpenAPI description file of this application's REST endpoints should be 694 * published or not. The default value is <code>false</code>. 695 * @see OpenApiDescriptionGenerator 696 * @see #OPENAPI_DESCRIPTION_PATH 697 * @since 5.8.0 698 */ 699 public static final String PUBLISH_OPENAPI_DEFINITON = "tapestry.publish-openapi-description"; 700 701 /** 702 * Defines the path the OpenAPI description file of this application's REST endpoints will be 703 * published. It should start with a slash. Default value is <code>/openapi.json</code>. 704 * The description will only be published if {{@link #PUBLISH_OPENAPI_DEFINITON} is set to 705 * <code>true</code>. 706 * @see OpenApiDescriptionGenerator 707 * @since 5.8.0 708 */ 709 public static final String OPENAPI_DESCRIPTION_PATH = "tapestry.openapi-description-path"; 710 711 /** 712 * Defines a base path to the generated OpenAPI description relative to the application 713 * URL as defined by {@link BaseURLSource#getBaseURL(boolean)}. It should be either 714 * the empty string, meaning there's no base path, or a string starting and ending 715 * with a slash. Default value is "/" (without the quotes) 716 * @see OpenApiDescriptionGenerator 717 * @since 5.8.0 718 */ 719 public static final String OPENAPI_BASE_PATH = "tapestry.openapi-base-path"; 720 721 /** 722 * Defines whether the CORS (Cross-Origing Resource Sharing) support 723 * should be enabled or not. Default value is "false". If you set this to "true", 724 * you should also set {@link #CORS_ALLOWED_ORIGINS}. 725 * This is an alias for {@link TapestryHttpSymbolConstants#CORS_ENABLED}. 726 * @see CorsHandler 727 * @see CorsHttpServletRequestFilter 728 * @since 5.8.2 729 */ 730 public static final String CORS_ENABLED = TapestryHttpSymbolConstants.CORS_ENABLED; 731 732 /** 733 * Comma-delimited of origins allowed for CORS. The special value "*" means allowing all origins. 734 * This is used by the default implementation of {@link CorsHandlerHelper#getAllowedOrigin(javax.servlet.http.HttpServletRequest)}. 735 * Default value is the empty string (i.e. no origins allowed and CORS actually disabled). 736 * This is an alias for {@link TapestryHttpSymbolConstants#CORS_ALLOWED_ORIGINS}. 737 * @since 5.8.2 738 */ 739 public static final String CORS_ALLOWED_ORIGINS = TapestryHttpSymbolConstants.CORS_ALLOWED_ORIGINS; 740 741 /** 742 * Boolean value defining whether the Access-Control-Allow-Credentials HTTP header 743 * should be set automatically in the response for CORS requests. Default value is 744 * <code>false</code>. This is used by the default implementation of {@link CorsHandlerHelper#configureCredentials(javax.servlet.http.HttpServletResponse)}. 745 * This is an alias for {@link TapestryHttpSymbolConstants#CORS_ALLOW_CREDENTIALS}. 746 * @since 5.8.2 747 */ 748 public static final String CORS_ALLOW_CREDENTIALS = TapestryHttpSymbolConstants.CORS_ALLOW_CREDENTIALS; 749 750 /** 751 * Value to be used in the Access-Control-Allow-Methods in CORS preflight request responses. 752 * This is used by the default implementation of {@link CorsHandlerHelper#configureMethods(javax.servlet.http.HttpServletResponse)}. 753 * Default value is <code>GET,HEAD,PUT,PATCH,POST,DELETE</code>. 754 * This is an alias for {@link TapestryHttpSymbolConstants#CORS_ALLOW_METHODS}. 755 * @since 5.8.2 756 */ 757 public static final String CORS_ALLOW_METHODS = TapestryHttpSymbolConstants.CORS_ALLOW_METHODS; 758 759 /** 760 * Value to be used in the Access-Control-Allow-Headers in CORS preflight request responses. 761 * This is used by the default implementation of {@link CorsHandlerHelper#configureAllowedHeaders(javax.servlet.http.HttpServletResponse, javax.servlet.http.HttpServletRequest)}. 762 * Default value is the empty string. 763 * This is an alias for {@link TapestryHttpSymbolConstants#CORS_ALLOWED_HEADERS}. 764 * @since 5.8.2 765 */ 766 public static final String CORS_ALLOWED_HEADERS = TapestryHttpSymbolConstants.CORS_ALLOWED_HEADERS; 767 768 /** 769 * Value to be used in the Access-Control-Expose-Headers in CORS request responses. 770 * This is used by the default implementation of {@link CorsHandlerHelper#configureExposeHeaders(javax.servlet.http.HttpServletResponse)}. 771 * Default value is the empty string. 772 * This is an alias for {@link TapestryHttpSymbolConstants#CORS_EXPOSE_HEADERS}. 773 * @since 5.8.2 774 */ 775 public static final String CORS_EXPOSE_HEADERS = TapestryHttpSymbolConstants.CORS_EXPOSE_HEADERS; 776 777 /** 778 * Value to be used in the Access-Control-Max-Age in responses to preflight CORS requests. 779 * This is used by the default implementation of {@link CorsHandlerHelper#configureMaxAge(javax.servlet.http.HttpServletResponse)}. 780 * Default value is the empty string. 781 * This is an alias for {@link TapestryHttpSymbolConstants#CORS_MAX_AGE}. 782 * @since 5.8.2 783 */ 784 public static final String CORS_MAX_AGE = TapestryHttpSymbolConstants.CORS_MAX_AGE; 785 786 /** 787 * Defines whether multiple classloaders will be used instead of one for smarter page invalidation. 788 * This is ignored when in production mode. 789 * Default value is <code>false</code>. 790 * @see PageClassLoaderContextManager 791 * @since 5.8.3 792 */ 793 public static final String MULTIPLE_CLASSLOADERS = "tapestry.multiple-classloaders"; 794 795 /** 796 * <p> 797 * Defines what file should be used to store and read component dependency information. 798 * It can be either an absolute path or a path relative to the current folder where 799 * the JVM is running. 800 * </p> 801 * <p> 802 * This symbol is ignored when in production mode. 803 * </p> 804 * <p> 805 * Default value is <code>tapestryComponentDependencies.json</code> 806 * ({@linkplain ComponentDependencyRegistry#FILENAME}). 807 * </p> 808 * @see ComponentDependencyRegistry 809 * @since 5.8.4 810 */ 811 public static final String COMPONENT_DEPENDENCY_FILE = "tapestry.component-dependency-file"; 812 813}