2013-04-19 48 views
1

在我的jsp我有这样的代码:插入值 - struts2的+ Liferay的

..... 
    // get userid 
    long userid = com.liferay.portal.util.PortalUtil.getUserId(request); 
    String userName = com.liferay.portal.util.PortalUtil.getUserName(userid , "guest"); 
    %> 

    <s:textfield name="user" value="<%=userName%>"></s:textfield> 

我不能在文本框来显示用户名值。

请问你能帮助我吗? 谢谢。

+2

[如何获取JSP脚本值在struts标记]可能的重复(http://stackoverflow.com/questions/724887/how-to-get-jsp-scriptlet-value-in-struts-tag) – Quaternion 2013-04-20 04:22:11

+1

liferay对这个问题没有影响,你只需要在s2标签中使用scriptlet变量。 – Quaternion 2013-04-20 04:23:07

回答

1

Scriptlets不允许与Struts标签一起使用。而且您不能访问脚本变量userName,因为它不在值栈上。要使其可用,只需在具有脚本变量值的值堆栈中创建一个新变量即可。

<s:set var="userName"><%=userName%></s:set> 
<s:textfield name="user" value="%{#userName}"/> 

另一种不期望的方法是利用struts标签可访问的已知容器,如请求。

<% request.setAttribute("userName", userName); %> 
<s:textfield name="user" value="%{#request.userName}"/> 

您可能会注意到在第一个示例中创建新变量并将值作为字符串打印到out的脚本变量传递的区别。在第二个示例中,脚本变量通过引用传递。

+0

感谢它的工作原理!!!如果我想直接从我的java类中检索用户,我该怎么做?谢谢 – user2273574 2013-04-20 09:39:35

+0

将它关联到动作,它将可用,动作位于值栈的顶部,所以你不需要使用'#'。确保它是一个java bean,并且在操作中也有访问者。然后像'user.name'一样引用它。 – 2013-04-20 09:42:33

+0

请问你有一个例子吗? – user2273574 2013-04-20 13:58:25