【问题标题】:Unable to get values in JSP in Struts2 Liferay6.2 Portlet无法在 Struts2 Liferay6.2 Portlet 中获取 JSP 中的值
【发布时间】:2014-09-02 10:07:43
【问题描述】:

简要概述:我正在尝试将基于 Struts2 的 webapp 移植到 Struts2 Liferay portlet 中。

问题定义:即使操作类方法在我的变量中正确设置了值,这些值也会被提取为 NULL/Blank。 当我的方法在 Action Class 和我的 jsp 中返回时,我尝试打印出这些值。我可以从返回 SUCCESS 之前放置的记录器中看到这些值已正确设置,但在 jsp 中我可以看到所有必需的设置变量都是空白的!

代码sn-p:

在 jsp 中,代码获取如下值: 比如

<br>
<s:if test="%{xyz!= null}">
 <br />
  <div style="margin-left:9em;">
   <s:property value="xyz" escapeHtml="false"/> //never displayed as xyz is NULL 
  </div>
 <br /><br />
</s:if>
<br>

在打印出 xyz:&lt;s:text name="%{xyz}"/&gt; 时,我得到空白值,这发生在 jsp 中的所有必需值上。

我尝试过的选项:

我曾尝试使用:%{#xyz}%{xyz},但没有帮助。

struts.xml

<action name="selectSite" class="com.abc.xyz.LandingPageAction"
                     method="selectSite">
            <interceptor-ref name="abAjaxCallInterceptorStack" />
            <result name="success" >/WEB-INF/jsp/portal/LandingContent.jsp</result>
        </action>

liferay-portlet.xml:

<liferay-portlet-app>
    <portlet>
        <portlet-name>xyz-portlet</portlet-name>
        <icon>/icon.png</icon>
        <private-session-attributes>false</private-session-attributes>       
        <requires-namespaced-parameters>false</requires-namespaced-parameters>  
        <header-portlet-css>/css/main.css</header-portlet-css>
        <footer-portlet-javascript>/js/main.js</footer-portlet-javascript>
        <add-default-resource>true</add-default-resource> 
    </portlet>
</liferay-portlet-app>  

jsp页面:

<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ taglib prefix="sj" uri="/struts-jquery-tags"%>

<br>
<s:if test="%{xyz!= null}">
 <br />
  <div style="margin-left:9em;">
   <s:property value="xyz" escapeHtml="false"/>
  </div>
 <br /><br />
</s:if>
<br>

<br />

<sj:tabbedpanel id="billTab" >
    <sj:tab id="overview" href="%{overviewURL}" label="Overview"
            target="overviewDiv" indicator="loadingInd" />
    <sj:tab id="invoices" href="%{invoiceURL}" label="Invoices" 
            target="invoicesDiv" indicator="loadingInd" />
    <div id="overviewDiv" ></div>
    <div id="invoicesDiv" ></div>

</sj:tabbedpanel>

【问题讨论】:

  • 为什么这段代码不起作用?不起作用的代码不可用。
  • 未获取值,但是在我的 ActionClass 方法中设置了所需的变量,该方法返回成功。它期望从变量(如 %{abc})中获取值的所有地方都显示为空白。
  • 修改了原帖,如果有帮助的话。%{overviewURL},%{invoiceURL} 被提取为空白
  • 只是想添加一个默认拦截器,它会在每个请求上执行。
  • 您是说这是在常规 Web 应用程序中工作,而不是在 portlet 中工作?

标签: struts2 liferay-6 portlet


【解决方案1】:

试试

<s:if test="xyz!= null">

如果 xyz 在 valuestack 上,那么你不需要使用 %

您也可以使用 Set 标签来公开这些值,例如

&lt;s:set var="varName" value="xyz"/&gt;then 只需将其称为 varName 而不是 #varName

如果您在不同的 portlet 中访问 var,您将至少将变量的值设置为像这样的请求范围

<s:set var="varName" value="xyz" scope="request"/>

然后你可以像这样从同一页面中的另一个 portlet 访问它们

<s:if test="#request.xyz != null">

【讨论】:

  • &lt;s:set&gt; name 属性已弃用,最好使用#varName
  • 是的,用 var 代替 name
  • 感谢您的回复!我会尝试一下,然后回来查询:)
  • 直接使用 xyz,没有帮助:(
  • 您可能想尝试使用#attr.xyz,它的作用是按顺序检查页面、请求、会话和应用程序范围。如果它仍然没有返回任何东西,那么问题就出在其他地方。检查 xyz 是否实际添加为参数。我可以看到您只是在 struts.xml 中的操作中转发到一个 jsp。您可以尝试重定向操作并将参数添加为参数标记
猜你喜欢
  • 1970-01-01
  • 2015-05-30
  • 2015-05-16
  • 2021-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多