无法在Struts2 Liferay6.2 Portlet中获取JSP中的值

时间:2014-09-02 10:07:43

标签: struts2 liferay-6 portlet

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

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

代码段:

在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:<s:text name="%{xyz}"/>时,我得到空白值,这对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>

1 个答案:

答案 0 :(得分:0)

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

如果xyz位于valuestack上,那么您不需要使用%

您还可以使用Set tag来公开这些值,例如

<s:set var="varName" value="xyz"/>然后只需将其称为varName而不是#varName

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

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

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

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