#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
#

webwork.objectFactory = org.codehaus.plexus.spring.WebWorkPlexusInSpringObjectFactory
#org.codehaus.plexus.xwork.PlexusObjectFactory
#webwork.tag.altSyntax = true

# Theme
webwork.ui.theme = default

webwork.serve.static = true

# Locale
#webwork.locale=en_EN

# Upload
webwork.multipart.parser = jakarta
# default saveDir is defined by javax.servlet.context.tempdir property
#webwork.multipart.saveDir =
# default max size is 2097152 (2MB)
#webwork.multipart.maxSize = 

# Localization
webwork.custom.i18n.resources=localization,org.codehaus.plexus.redback.xwork.default,org.apache.maven.continuum.redback.custom
