You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@roller.apache.org by NAREN <ge...@gmail.com> on 2020/03/04 17:24:29 UTC

Re: Roller 6 configuration Page struts error

Dave,

          I see few more errors:

1)  create New user: Email field has limitation and long emails cannot be
added as max length is 30., and on saving it with new user less than 30
chars throws
System error - check logs for more information.

2)  Invite new member:  Highlighting new member from the drop down is not
populating to username filed, it needs to be entered manually.

3) Weblog members  permissions: Error saving member permissions and its
happening on few blogs

Members:save - Error saving permissions on weblog - director

java.lang.NullPointerException

        at
org.apache.roller.weblogger.ui.struts2.editor.Members.save(Members.java:96)

        at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)

        at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

        at
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

        at java.base/java.lang.reflect.Method.invoke(Method.java:566)

        at ognl.OgnlRuntime.invokeMethodInsideSandbox(OgnlRuntime.java:1226)

        at ognl.OgnlRuntime.invokeMethod(OgnlRuntime.java:1211)

        at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1920)

        at
ognl.ObjectMethodAccessor.callMethod(ObjectMethodAccessor.java:68)

        at
com.opensymphony.xwork2.ognl.accessor.XWorkMethodAccessor.callMethodWithDebugInfo(XWorkMethodAccessor.java:98)

        at
com.opensymphony.xwork2.ognl.accessor.XWorkMethodAccessor.callMethod(XWorkMethodAccessor.java:90)

        at ognl.OgnlRuntime.callMethod(OgnlRuntime.java:1996)

        at ognl.ASTMethod.getValueBody(ASTMethod.java:91)

        at ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)

        at ognl.SimpleNode.getValue(SimpleNode.java:258)

        at ognl.Ognl.getValue(Ognl.java:537)

        at ognl.Ognl.getValue(Ognl.java:501)

        at
com.opensymphony.xwork2.ognl.OgnlUtil$3.execute(OgnlUtil.java:492)

        at
com.opensymphony.xwork2.ognl.OgnlUtil.compileAndExecuteMethod(OgnlUtil.java:544)

        at
com.opensymphony.xwork2.ognl.OgnlUtil.callMethod(OgnlUtil.java:490)

        at
com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:438)

        at
com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:293)

        at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:254)

        at
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:179)

        at
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:99)

        at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)

        at
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:263)

        at
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:49)

        at
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:99)

        at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)

        at
org.apache.roller.weblogger.ui.struts2.util.UIActionPrepareInterceptor.doIntercept(UIActionPrepareInterceptor.java:54)

        at
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:99)

        at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)

        at
org.apache.roller.weblogger.ui.struts2.util.UISecurityInterceptor.doIntercept(UISecurityInterceptor.java:123)

        at
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:99)

        at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)

        at
org.apache.roller.weblogger.ui.struts2.util.UIActionInterceptor.doIntercept(UIActionInterceptor.java:88)

        at
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:99)

        at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)

        at
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.doIntercept(ConversionErrorInterceptor.java:142)

        at
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:99)

        at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)

        at
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:137)

        at
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:99)

        at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)

        at
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:137)

        at
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:99)

        at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)

        at
com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:201)

        at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)

        at
org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:67)

        at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)

        at
org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:89)

        at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)

        at
org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243)

        at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)

        at
com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:160)

        at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)

        at
org.apache.struts2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:121)

        at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)

        at
org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:167)

        at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)

        at
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:196)

        at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)

        at
org.apache.struts2.factory.StrutsActionProxy.execute(StrutsActionProxy.java:48)

        at
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:574)

        at
org.apache.struts2.dispatcher.ExecuteOperations.executeAction(ExecuteOperations.java:79)

        at
org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:141)

        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)

        at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)

        at
org.apache.roller.weblogger.ui.rendering.filters.RequestMappingFilter.doFilter(RequestMappingFilter.java:133)

        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)

        at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)

        at
org.apache.roller.weblogger.ui.core.filters.ValidateSaltFilter.doFilter(ValidateSaltFilter.java:74)

        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)

        at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)

        at
org.apache.roller.weblogger.ui.core.filters.LoadSaltFilter.doFilter(LoadSaltFilter.java:44)

        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)

        at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)

        at
org.apache.roller.weblogger.ui.core.filters.InitFilter.doFilter(InitFilter.java:73)

        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)

        at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)

        at
org.apache.roller.weblogger.ui.core.filters.PersistenceSessionFilter.doFilter(PersistenceSessionFilter.java:58)

        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)

        at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)

        at
org.apache.roller.weblogger.ui.core.filters.BootstrapFilter.doFilter(BootstrapFilter.java:67)

        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)

        at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)

        at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)

        at
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118)

        at
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84)

        at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)

        at
org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)

        at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)

        at
org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103)

        at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)

        at
org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)

        at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)

        at
org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:146)

        at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)

        at
org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:154)

        at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)

        at
org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45)

        at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)

        at
org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:199)

        at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)

        at
org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:199)

        at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)

        at
org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:50)

        at
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)

        at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)

        at
org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)

        at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)

        at
org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192)

        at
org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160)

        at
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:344)

        at
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:261)

        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)

        at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)

        at
org.apache.roller.weblogger.ui.core.filters.CharEncodingFilter.doFilter(CharEncodingFilter.java:85)

        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)

        at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)

        at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218)

        at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110)

        at
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:498)

        at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)

        at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)

        at
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:962)

        at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)

        at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:445)

        at
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091)

        at
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)

        at
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)

        at
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)

        at
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)

        at
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

        at java.base/java.lang.Thread.run(Thread.java:834)

Thanks
Naren



On Sat, Feb 29, 2020 at 3:51 PM Dave <sn...@gmail.com> wrote:

> I investigated this problem and here's what I found:
> https://issues.apache.org/jira/browse/ROL-2160
>
> I have also proposed a solution to this problem in the JIRA ticket. I have
> tested that solution and it works, but it is really a work-around for what
> I believe is a bug in Struts.
>
> Here's a PR with the fix: https://github.com/apache/roller/pull/55
>
> Thanks,
> Dave
>
>
>
> On Fri, Feb 28, 2020 at 7:08 PM Naren <ge...@gmail.com> wrote:
>
> > Dave,
> >
> >        Thanks again for fixing it in advance and also I have few
> > suggestions that might be useful for folks using Roller.
> >
> >
> > 1) For installing this behind firewall with internet restrictions in DMZ:
> >   Packaging the required libraries will help, for example when I
> installed
> > Roller 5.2.4 I had to download tiles-config_3_0.dtd
> >   and refer it like locally. /WEB-INF/lib/tiles-config_3_0.dtd"
> >
> > 2) /webapps//WEB-INF/classes/struts.xml which was part of the 5.2.4
> Global
> > allowed methods didnt work and I had to add them to
> >    as allowed-methods for each action. I see it has been fixed in roller
> > 6.0
> >
> > 3) I saw another issue with database connectivity,  it works fine with
> both
> > Tomcat/MySQL on the same server and  with
> >    multiple Tomcat and MySQL servers sitting on separate servers under
> load
> > balancer it wont update the content to all servers
> >     under load balancer, any server that user get in that session under
> > load balancer can see updates happening on just server and
> >    I figured out that eclipse cache and persistence was causing that.  To
> > overcome that issue
> >    I had to add eclipselink.cache.shared.default=false and
> >  eclipselink.persistence-context.flush-mode=commit to
> >    roller-custom.properties
> > 4) I would like to see options that will turn off the notification emails
> > Roller trying to send commentators to blog posts.
> >      Word press has an option in configuration screen to turn it off or
> on
> > and it would be useful for Roller users.
> >     In roller roller-custom.properties we should be able to add something
> > like this--> users.comments.emailnotify=false
> >
> >     code has the following and there are no options to turn it off:
> >    // if required, send notification for all comments changed
> >              if (MailUtil.isMailConfigured()) {
> >                  I18nMessages resources = I18nMessages
> >
> >  .getMessages(getActionWeblog().getLocaleInstance());
> >
> MailUtil.sendEmailApprovalNotifications(approvedComments,
> >                          resources);
> >              }
> >
> > Hope these are some useful suggestions.
> >
> > Thanks
> > Naren
> >
> > On Fri, Feb 28, 2020 at 6:18 PM Dave <sn...@gmail.com> wrote:
> >
> > > I can now reproduce the issue locally and hope to have a fix this
> > weekend,
> > > probably a test build to be followed by a Roller 6.0.1 release. Thanks
> > for
> > > reporting this issue.
> > >
> > > Dave
> > >
> > >
> > > On Tue, Feb 25, 2020 at 7:51 PM Naren <ge...@gmail.com> wrote:
> > >
> > > > Dave,
> > > >
> > > >       Thanks for getting back to me. Please let me know if its going
> to
> > > be
> > > > patch or code base update.
> > > >
> > > > Thanks again for your help
> > > > Naren
> > > >
> > > > On Tue, Feb 25, 2020 at 6:34 PM Dave <sn...@gmail.com> wrote:
> > > >
> > > > > Hi Naren,
> > > > >
> > > > > I was able to reproduce your issue on my personal site (which runs
> > JDK
> > > 11
> > > > > and Tomcat 9), which means that I should be able to fix it. Oddly,
> I
> > do
> > > > not
> > > > > see this error when I run Roller locally on the same setup.
> > > > >
> > > > > Thanks,
> > > > > Dave
> > > > >
> > > > >
> > > > > On Mon, Feb 17, 2020 at 6:42 PM Naren <ge...@gmail.com> wrote:
> > > > >
> > > > > > Dave?, thanks unfortunately, I will not be able to update Tomcat
> as
> > > > its a
> > > > > > big change in my organization.
> > > > > >
> > > > > > valueKey" is null but this is a value passed from outside to
> > Struts'
> > > > > > getText function.
> > > > > >
> > > > > > Please let me know when u test with Tomcat7 next week
> > > > > >
> > > > > > Thanks again for your help
> > > > > >
> > > > > > Naren
> > > > > >
> > > > > > On Mon, Feb 17, 2020 at 6:22 PM Dave <sn...@gmail.com>
> wrote:
> > > > > >
> > > > > > > I'm not able to reproduce this error and I may not have time to
> > > check
> > > > > > that
> > > > > > > until this weekend. Can you try a newer version of Tomcat?  I'm
> > > > pretty
> > > > > > sure
> > > > > > > I never tested Roller 6 on Tomcat 7.
> > > > > > >
> > > > > > > Dave
> > > > > > >
> > > > > > >
> > > > > > > On Sun, Feb 16, 2020 at 8:18 PM Naren <ge...@gmail.com>
> > wrote:
> > > > > > >
> > > > > > > >
> > > > > > > >   I downloaded roller 6.0  and my environment details are as
> > > below
> > > > > > > > Apache Tomcat/7.0.76
> > > > > > > > MySQL: 5.7.26
> > > > > > > > openjdk version "11.0.6"
> > > > > > > >
> > > > > > > >
> > > > > > > > I see an issue with config form and and the form does not
> > > complete
> > > > > and
> > > > > > > has
> > > > > > > > no save or cancel button,
> > > > > > > > Could you please let me know on this?
> > > > > > > >
> > > > > > > > The following has evaluated to null or missing:
> > > > > > > > ==> struts.getText(valueKey) [in template
> > > > > "template/simple/select.ftl"
> > > > > > at
> > > > > > > > line 75, column 36]
> > > > > > > >
> > > > > > > > ----
> > > > > > > > Tip: If the failing expression is known to legally refer to
> > > > something
> > > > > > > > that's sometimes null or missing, either specify a default
> > value
> > > > like
> > > > > > > > myOptionalVar!myDefault, or use &lt;#if
> > > > > > > > myOptionalVar??>when-present&lt;#else>when-missing&lt;/#if>.
> > > (These
> > > > > > only
> > > > > > > > cover the last step of the expression; to cover the whole
> > > > expression,
> > > > > > use
> > > > > > > > parenthesis: (myOptionalVar.foo)!myDefault,
> > (myOptionalVar.foo)??
> > > > > > > > ----
> > > > > > > >
> > > > > > > > ----
> > > > > > > > FTL stack trace ("~" means nesting-related):
> > > > > > > > - Failed at: #assign itemValue = struts.getText(va... [in
> > > template
> > > > > > > > "template/simple/select.ftl" at line 75, column 15]
> > > > > > > > - Reached through: @s.iterator value="parameters.list" [in
> > > template
> > > > > > > > "template/simple/select.ftl" at line 57, column 1]
> > > > > > > > - Reached through: #include "/${parameters.templateDir}/...
> [in
> > > > > > template
> > > > > > > > "template/bootstrap/select.ftl" at line 22, column 1]
> > > > > > > >
> > > > > > > > [image: image.png]
> > > > > > > > --
> > > > > > > > Naren
> > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > > --
> > > > > > Naren
> > > > > >
> > > > >
> > > > --
> > > > Naren
> > > >
> > >
> >
> >
> > --
> > Naren
> >
>

Re: Roller 6 configuration Page struts error

Posted by Dave <sn...@gmail.com>.
Thanks for reporting these Naren. I'll create JIRA issues for them and
start working towards a 6.0.1 release.

Dave

On Wed, Mar 4, 2020 at 12:24 PM NAREN <ge...@gmail.com> wrote:

> Dave,
>
>           I see few more errors:
>
> 1)  create New user: Email field has limitation and long emails cannot be
> added as max length is 30., and on saving it with new user less than 30
> chars throws
> System error - check logs for more information.
>
> 2)  Invite new member:  Highlighting new member from the drop down is not
> populating to username filed, it needs to be entered manually.
>
> 3) Weblog members  permissions: Error saving member permissions and its
> happening on few blogs
>
> Members:save - Error saving permissions on weblog - director
>
> java.lang.NullPointerException
>
>         at
> org.apache.roller.weblogger.ui.struts2.editor.Members.save(Members.java:96)
>
>         at
> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native
> Method)
>
>         at
>
> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>
>         at
>
> java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>
>         at java.base/java.lang.reflect.Method.invoke(Method.java:566)
>
>         at
> ognl.OgnlRuntime.invokeMethodInsideSandbox(OgnlRuntime.java:1226)
>
>         at ognl.OgnlRuntime.invokeMethod(OgnlRuntime.java:1211)
>
>         at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1920)
>
>         at
> ognl.ObjectMethodAccessor.callMethod(ObjectMethodAccessor.java:68)
>
>         at
>
> com.opensymphony.xwork2.ognl.accessor.XWorkMethodAccessor.callMethodWithDebugInfo(XWorkMethodAccessor.java:98)
>
>         at
>
> com.opensymphony.xwork2.ognl.accessor.XWorkMethodAccessor.callMethod(XWorkMethodAccessor.java:90)
>
>         at ognl.OgnlRuntime.callMethod(OgnlRuntime.java:1996)
>
>         at ognl.ASTMethod.getValueBody(ASTMethod.java:91)
>
>         at ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)
>
>         at ognl.SimpleNode.getValue(SimpleNode.java:258)
>
>         at ognl.Ognl.getValue(Ognl.java:537)
>
>         at ognl.Ognl.getValue(Ognl.java:501)
>
>         at
> com.opensymphony.xwork2.ognl.OgnlUtil$3.execute(OgnlUtil.java:492)
>
>         at
>
> com.opensymphony.xwork2.ognl.OgnlUtil.compileAndExecuteMethod(OgnlUtil.java:544)
>
>         at
> com.opensymphony.xwork2.ognl.OgnlUtil.callMethod(OgnlUtil.java:490)
>
>         at
>
> com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:438)
>
>         at
>
> com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:293)
>
>         at
>
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:254)
>
>         at
>
> com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:179)
>
>         at
>
> com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:99)
>
>         at
>
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
>
>         at
>
> com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:263)
>
>         at
>
> org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:49)
>
>         at
>
> com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:99)
>
>         at
>
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
>
>         at
>
> org.apache.roller.weblogger.ui.struts2.util.UIActionPrepareInterceptor.doIntercept(UIActionPrepareInterceptor.java:54)
>
>         at
>
> com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:99)
>
>         at
>
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
>
>         at
>
> org.apache.roller.weblogger.ui.struts2.util.UISecurityInterceptor.doIntercept(UISecurityInterceptor.java:123)
>
>         at
>
> com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:99)
>
>         at
>
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
>
>         at
>
> org.apache.roller.weblogger.ui.struts2.util.UIActionInterceptor.doIntercept(UIActionInterceptor.java:88)
>
>         at
>
> com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:99)
>
>         at
>
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
>
>         at
>
> com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.doIntercept(ConversionErrorInterceptor.java:142)
>
>         at
>
> com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:99)
>
>         at
>
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
>
>         at
>
> com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:137)
>
>         at
>
> com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:99)
>
>         at
>
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
>
>         at
>
> com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:137)
>
>         at
>
> com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:99)
>
>         at
>
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
>
>         at
>
> com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:201)
>
>         at
>
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
>
>         at
>
> org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:67)
>
>         at
>
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
>
>         at
>
> org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:89)
>
>         at
>
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
>
>         at
>
> org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243)
>
>         at
>
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
>
>         at
>
> com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:160)
>
>         at
>
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
>
>         at
>
> org.apache.struts2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:121)
>
>         at
>
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
>
>         at
>
> org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:167)
>
>         at
>
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
>
>         at
>
> com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:196)
>
>         at
>
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
>
>         at
>
> org.apache.struts2.factory.StrutsActionProxy.execute(StrutsActionProxy.java:48)
>
>         at
> org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:574)
>
>         at
>
> org.apache.struts2.dispatcher.ExecuteOperations.executeAction(ExecuteOperations.java:79)
>
>         at
>
> org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:141)
>
>         at
>
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
>
>         at
>
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
>
>         at
>
> org.apache.roller.weblogger.ui.rendering.filters.RequestMappingFilter.doFilter(RequestMappingFilter.java:133)
>
>         at
>
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
>
>         at
>
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
>
>         at
>
> org.apache.roller.weblogger.ui.core.filters.ValidateSaltFilter.doFilter(ValidateSaltFilter.java:74)
>
>         at
>
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
>
>         at
>
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
>
>         at
>
> org.apache.roller.weblogger.ui.core.filters.LoadSaltFilter.doFilter(LoadSaltFilter.java:44)
>
>         at
>
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
>
>         at
>
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
>
>         at
>
> org.apache.roller.weblogger.ui.core.filters.InitFilter.doFilter(InitFilter.java:73)
>
>         at
>
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
>
>         at
>
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
>
>         at
>
> org.apache.roller.weblogger.ui.core.filters.PersistenceSessionFilter.doFilter(PersistenceSessionFilter.java:58)
>
>         at
>
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
>
>         at
>
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
>
>         at
>
> org.apache.roller.weblogger.ui.core.filters.BootstrapFilter.doFilter(BootstrapFilter.java:67)
>
>         at
>
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
>
>         at
>
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
>
>         at
>
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
>
>         at
>
> org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118)
>
>         at
>
> org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84)
>
>         at
>
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
>
>         at
>
> org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)
>
>         at
>
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
>
>         at
>
> org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103)
>
>         at
>
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
>
>         at
>
> org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)
>
>         at
>
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
>
>         at
>
> org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:146)
>
>         at
>
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
>
>         at
>
> org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:154)
>
>         at
>
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
>
>         at
>
> org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45)
>
>         at
>
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
>
>         at
>
> org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:199)
>
>         at
>
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
>
>         at
>
> org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:199)
>
>         at
>
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
>
>         at
>
> org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:50)
>
>         at
>
> org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
>
>         at
>
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
>
>         at
>
> org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
>
>         at
>
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
>
>         at
>
> org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192)
>
>         at
>
> org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160)
>
>         at
>
> org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:344)
>
>         at
>
> org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:261)
>
>         at
>
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
>
>         at
>
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
>
>         at
>
> org.apache.roller.weblogger.ui.core.filters.CharEncodingFilter.doFilter(CharEncodingFilter.java:85)
>
>         at
>
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
>
>         at
>
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
>
>         at
>
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218)
>
>         at
>
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110)
>
>         at
>
> org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:498)
>
>         at
>
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
>
>         at
>
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
>
>         at
> org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:962)
>
>         at
>
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
>
>         at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:445)
>
>         at
>
> org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091)
>
>         at
>
> org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
>
>         at
> org.apache.tomcat.util.net
> .JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
>
>         at
>
> java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
>
>         at
>
> java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
>
>         at
>
> org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
>
>         at java.base/java.lang.Thread.run(Thread.java:834)
>
> Thanks
> Naren
>
>
>
> On Sat, Feb 29, 2020 at 3:51 PM Dave <sn...@gmail.com> wrote:
>
> > I investigated this problem and here's what I found:
> > https://issues.apache.org/jira/browse/ROL-2160
> >
> > I have also proposed a solution to this problem in the JIRA ticket. I
> have
> > tested that solution and it works, but it is really a work-around for
> what
> > I believe is a bug in Struts.
> >
> > Here's a PR with the fix: https://github.com/apache/roller/pull/55
> >
> > Thanks,
> > Dave
> >
> >
> >
> > On Fri, Feb 28, 2020 at 7:08 PM Naren <ge...@gmail.com> wrote:
> >
> > > Dave,
> > >
> > >        Thanks again for fixing it in advance and also I have few
> > > suggestions that might be useful for folks using Roller.
> > >
> > >
> > > 1) For installing this behind firewall with internet restrictions in
> DMZ:
> > >   Packaging the required libraries will help, for example when I
> > installed
> > > Roller 5.2.4 I had to download tiles-config_3_0.dtd
> > >   and refer it like locally. /WEB-INF/lib/tiles-config_3_0.dtd"
> > >
> > > 2) /webapps//WEB-INF/classes/struts.xml which was part of the 5.2.4
> > Global
> > > allowed methods didnt work and I had to add them to
> > >    as allowed-methods for each action. I see it has been fixed in
> roller
> > > 6.0
> > >
> > > 3) I saw another issue with database connectivity,  it works fine with
> > both
> > > Tomcat/MySQL on the same server and  with
> > >    multiple Tomcat and MySQL servers sitting on separate servers under
> > load
> > > balancer it wont update the content to all servers
> > >     under load balancer, any server that user get in that session under
> > > load balancer can see updates happening on just server and
> > >    I figured out that eclipse cache and persistence was causing that.
> To
> > > overcome that issue
> > >    I had to add eclipselink.cache.shared.default=false and
> > >  eclipselink.persistence-context.flush-mode=commit to
> > >    roller-custom.properties
> > > 4) I would like to see options that will turn off the notification
> emails
> > > Roller trying to send commentators to blog posts.
> > >      Word press has an option in configuration screen to turn it off or
> > on
> > > and it would be useful for Roller users.
> > >     In roller roller-custom.properties we should be able to add
> something
> > > like this--> users.comments.emailnotify=false
> > >
> > >     code has the following and there are no options to turn it off:
> > >    // if required, send notification for all comments changed
> > >              if (MailUtil.isMailConfigured()) {
> > >                  I18nMessages resources = I18nMessages
> > >
> > >  .getMessages(getActionWeblog().getLocaleInstance());
> > >
> > MailUtil.sendEmailApprovalNotifications(approvedComments,
> > >                          resources);
> > >              }
> > >
> > > Hope these are some useful suggestions.
> > >
> > > Thanks
> > > Naren
> > >
> > > On Fri, Feb 28, 2020 at 6:18 PM Dave <sn...@gmail.com> wrote:
> > >
> > > > I can now reproduce the issue locally and hope to have a fix this
> > > weekend,
> > > > probably a test build to be followed by a Roller 6.0.1 release.
> Thanks
> > > for
> > > > reporting this issue.
> > > >
> > > > Dave
> > > >
> > > >
> > > > On Tue, Feb 25, 2020 at 7:51 PM Naren <ge...@gmail.com> wrote:
> > > >
> > > > > Dave,
> > > > >
> > > > >       Thanks for getting back to me. Please let me know if its
> going
> > to
> > > > be
> > > > > patch or code base update.
> > > > >
> > > > > Thanks again for your help
> > > > > Naren
> > > > >
> > > > > On Tue, Feb 25, 2020 at 6:34 PM Dave <sn...@gmail.com> wrote:
> > > > >
> > > > > > Hi Naren,
> > > > > >
> > > > > > I was able to reproduce your issue on my personal site (which
> runs
> > > JDK
> > > > 11
> > > > > > and Tomcat 9), which means that I should be able to fix it.
> Oddly,
> > I
> > > do
> > > > > not
> > > > > > see this error when I run Roller locally on the same setup.
> > > > > >
> > > > > > Thanks,
> > > > > > Dave
> > > > > >
> > > > > >
> > > > > > On Mon, Feb 17, 2020 at 6:42 PM Naren <ge...@gmail.com>
> wrote:
> > > > > >
> > > > > > > Dave?, thanks unfortunately, I will not be able to update
> Tomcat
> > as
> > > > > its a
> > > > > > > big change in my organization.
> > > > > > >
> > > > > > > valueKey" is null but this is a value passed from outside to
> > > Struts'
> > > > > > > getText function.
> > > > > > >
> > > > > > > Please let me know when u test with Tomcat7 next week
> > > > > > >
> > > > > > > Thanks again for your help
> > > > > > >
> > > > > > > Naren
> > > > > > >
> > > > > > > On Mon, Feb 17, 2020 at 6:22 PM Dave <sn...@gmail.com>
> > wrote:
> > > > > > >
> > > > > > > > I'm not able to reproduce this error and I may not have time
> to
> > > > check
> > > > > > > that
> > > > > > > > until this weekend. Can you try a newer version of Tomcat?
> I'm
> > > > > pretty
> > > > > > > sure
> > > > > > > > I never tested Roller 6 on Tomcat 7.
> > > > > > > >
> > > > > > > > Dave
> > > > > > > >
> > > > > > > >
> > > > > > > > On Sun, Feb 16, 2020 at 8:18 PM Naren <ge...@gmail.com>
> > > wrote:
> > > > > > > >
> > > > > > > > >
> > > > > > > > >   I downloaded roller 6.0  and my environment details are
> as
> > > > below
> > > > > > > > > Apache Tomcat/7.0.76
> > > > > > > > > MySQL: 5.7.26
> > > > > > > > > openjdk version "11.0.6"
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > I see an issue with config form and and the form does not
> > > > complete
> > > > > > and
> > > > > > > > has
> > > > > > > > > no save or cancel button,
> > > > > > > > > Could you please let me know on this?
> > > > > > > > >
> > > > > > > > > The following has evaluated to null or missing:
> > > > > > > > > ==> struts.getText(valueKey) [in template
> > > > > > "template/simple/select.ftl"
> > > > > > > at
> > > > > > > > > line 75, column 36]
> > > > > > > > >
> > > > > > > > > ----
> > > > > > > > > Tip: If the failing expression is known to legally refer to
> > > > > something
> > > > > > > > > that's sometimes null or missing, either specify a default
> > > value
> > > > > like
> > > > > > > > > myOptionalVar!myDefault, or use &lt;#if
> > > > > > > > >
> myOptionalVar??>when-present&lt;#else>when-missing&lt;/#if>.
> > > > (These
> > > > > > > only
> > > > > > > > > cover the last step of the expression; to cover the whole
> > > > > expression,
> > > > > > > use
> > > > > > > > > parenthesis: (myOptionalVar.foo)!myDefault,
> > > (myOptionalVar.foo)??
> > > > > > > > > ----
> > > > > > > > >
> > > > > > > > > ----
> > > > > > > > > FTL stack trace ("~" means nesting-related):
> > > > > > > > > - Failed at: #assign itemValue = struts.getText(va... [in
> > > > template
> > > > > > > > > "template/simple/select.ftl" at line 75, column 15]
> > > > > > > > > - Reached through: @s.iterator value="parameters.list" [in
> > > > template
> > > > > > > > > "template/simple/select.ftl" at line 57, column 1]
> > > > > > > > > - Reached through: #include "/${parameters.templateDir}/...
> > [in
> > > > > > > template
> > > > > > > > > "template/bootstrap/select.ftl" at line 22, column 1]
> > > > > > > > >
> > > > > > > > > [image: image.png]
> > > > > > > > > --
> > > > > > > > > Naren
> > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > > --
> > > > > > > Naren
> > > > > > >
> > > > > >
> > > > > --
> > > > > Naren
> > > > >
> > > >
> > >
> > >
> > > --
> > > Naren
> > >
> >
>