<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <title>Portlet 3.0 Opt-in</title>
  <link rel="self" href="https://liferay.dev/en/c/message_boards/find_thread?p_l_id=119785294&amp;threadId=123368509" />
  <subtitle>Portlet 3.0 Opt-in</subtitle>
  <id>https://liferay.dev/en/c/message_boards/find_thread?p_l_id=119785294&amp;threadId=123368509</id>
  <updated>2026-04-07T16:56:16Z</updated>
  <dc:date>2026-04-07T16:56:16Z</dc:date>
  <entry>
    <title>RE: Portlet 3.0 Opt-in</title>
    <link rel="alternate" href="https://liferay.dev/en/c/message_boards/find_message?p_l_id=119785294&amp;messageId=123443442" />
    <author>
      <name>David H Nebinger</name>
    </author>
    <id>https://liferay.dev/en/c/message_boards/find_message?p_l_id=119785294&amp;messageId=123443442</id>
    <updated>2025-06-12T13:47:02Z</updated>
    <published>2025-06-12T13:47:02Z</published>
    <summary type="html">&lt;p&gt;The &lt;code&gt;javax.portlet.version&lt;/code&gt; property was all you needed to
  enable the portlet 3 spec. You might have had to purge the
  &lt;code&gt;osgi/state&lt;/code&gt; because that meta information sometimes
  doesn't change when it changes on the components, but if it's working
  now you should be fine.&lt;/p&gt;</summary>
    <dc:creator>David H Nebinger</dc:creator>
    <dc:date>2025-06-12T13:47:02Z</dc:date>
  </entry>
  <entry>
    <title>RE: Portlet 3.0 Opt-in</title>
    <link rel="alternate" href="https://liferay.dev/en/c/message_boards/find_message?p_l_id=119785294&amp;messageId=123371411" />
    <author>
      <name>Steve Weiss</name>
    </author>
    <id>https://liferay.dev/en/c/message_boards/find_message?p_l_id=119785294&amp;messageId=123371411</id>
    <updated>2025-04-24T19:23:17Z</updated>
    <published>2025-04-24T19:23:16Z</published>
    <summary type="html">&lt;p&gt;This seems to be working correctly now. I no longer get the
  &amp;quot;requires opt in&amp;quot; error message. I have no idea why, I
  didn't change any of that code.&lt;/p&gt;</summary>
    <dc:creator>Steve Weiss</dc:creator>
    <dc:date>2025-04-24T19:23:16Z</dc:date>
  </entry>
  <entry>
    <title>Portlet 3.0 Opt-in</title>
    <link rel="alternate" href="https://liferay.dev/en/c/message_boards/find_message?p_l_id=119785294&amp;messageId=123368508" />
    <author>
      <name>Steve Weiss</name>
    </author>
    <id>https://liferay.dev/en/c/message_boards/find_message?p_l_id=119785294&amp;messageId=123368508</id>
    <updated>2025-04-23T17:28:06Z</updated>
    <published>2025-04-23T17:26:04Z</published>
    <summary type="html">&lt;p&gt;I am trying to update a portlet to use the Portlet 3.0 spec. Portal
  version is DXP 2025.q1.7.  When I try the following code I get the
  following error message: &lt;strong&gt;Requires 3.0 opt-in&lt;/strong&gt;
&lt;/p&gt;
&lt;pre&gt;
&lt;code class="language-java"&gt;            PortletContext ctx = getPortletContext();
            int major = ctx.getMajorVersion();
            int minor = ctx.getMinorVersion();
            _log.info(ID + &amp;quot;Portlet API version = &amp;quot; + major + &amp;quot;.&amp;quot; + minor);

            Map&amp;lt;String, String[]&amp;gt; paramMap = new HashMap&amp;lt;&amp;gt;();
            PortletParameters rparams = request.getRenderParameters();
            Set&amp;lt;String&amp;gt; pnames = rparams.getNames();
            Iterator&amp;lt;String&amp;gt; itr = pnames.iterator();
            while (itr.hasNext()) {
                String name = itr.next();
                String[] values = rparams.getValues(name);
                _log.info(ID + &amp;quot;param name = &amp;quot; + name + &amp;quot;, value(s) = &amp;quot; + Arrays.toString(values));
                paramMap.put(name, values);
            }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The output in the log is this:&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;2025-04-23 17:15:19.664 INFO  [http-nio-8080-exec-3][DataMailerPortlet:137] gov.nasa.hq.datamailer.web.1.3.0:doView: Portlet API version = 3.0
2025-04-23 17:15:19.666 ERROR [http-nio-8080-exec-3][DataMailerPortlet:163] gov.nasa.hq.datamailer.web.1.3.0:doView: Requires 3.0 opt-in
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The portlet is configured with the @Component annotation:&lt;/p&gt;
&lt;pre&gt;
&lt;code class="language-java"&gt;@Component(
        configurationPid = &amp;quot;gov.nasa.hq.datamailer.portlet.internal.configuration.DataMailerConfiguration&amp;quot;,
        configurationPolicy = ConfigurationPolicy.OPTIONAL,
        immediate = true,
        property = {
                &amp;quot;javax.portlet.version=3.0&amp;quot;,
                &amp;quot;com.liferay.portlet.display-category=NASA&amp;quot;,
                &amp;quot;com.liferay.portlet.header-portlet-css=/css/styles.css&amp;quot;,
                &amp;quot;com.liferay.portlet.instanceable=true&amp;quot;,
                &amp;quot;javax.portlet.display-name=Data Mailer&amp;quot;,
                &amp;quot;javax.portlet.portlet-mode=text/html;view,edit&amp;quot;,
                &amp;quot;javax.portlet.init-param.template-path=/&amp;quot;,
                &amp;quot;javax.portlet.init-param.view-template=/jsp/view.jsp&amp;quot;,
                &amp;quot;javax.portlet.init-param.viewdata-template=/jsp/viewData.jsp&amp;quot;,
                &amp;quot;javax.portlet.init-param.edit-template=/jsp/pref/preferences.jsp&amp;quot;,
                &amp;quot;javax.portlet.name=&amp;quot; + DataMailerPortletKeys.DATAMAILER,
                &amp;quot;javax.portlet.resource-bundle=content.Language&amp;quot;,
                &amp;quot;javax.portlet.security-role-ref=power-user,user&amp;quot;
        },
        service = Portlet.class)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Any ideas on why this is not working?&lt;/p&gt;</summary>
    <dc:creator>Steve Weiss</dc:creator>
    <dc:date>2025-04-23T17:26:04Z</dc:date>
  </entry>
</feed>
