选择struts2中的下拉列表,从struts1迁移到struts2

时间:2018-06-06 08:46:17

标签: struts2 struts-1 struts1

以下是来自jsp的Struts1代码片段

<logic:notEmpty name="user" property="myLanguages" scope="session">
                       <html:select name="user" property="defaultLanguage">
                         <html:optionsCollection label="languageName" name="user" property="myLanguages" value="languageCode"/>
                       </html:select>
</logic:notEmpty>

以下是来自jsp的Struts2(2.5.16版本)代码片段无法正常工作

<s:if test="%{#session.user.myLanguages != null && #session.user.myLanguages != ''}">
                          <s:select list="{#session.user.myLanguages}"
                                      listKey="languageCode" listValue="languageName"
                                      name="user"  value="defaultLanguage"/>
</s:if>

以下是jsp

的scriplet代码
<%
User user = (User) session.getAttribute("user");
Vector vMyLang = user.getMyLanguages();
        System.out.println("logon.jsp:vMyLang--- "+vMyLang);
        if(null != vMyLang){
            System.out.println("logon.jsp:vMyLang-----  "+vMyLang.size());//here output(i.e size) is 20
        }
%>

因此会话中存在值,但我无法使用strut2标记, 日志中没有错误/异常

Struts1代码工作正常,Struts2代码无效(我的意思是下拉菜单没有在UI中显示)

请帮我解决我的错误。

2 个答案:

答案 0 :(得分:0)

JSP和scriptlet不等效。

在您的scriptlet中,您调用名为myLanguages()的方法。

<s:if />标记中,您尝试调用名为getMyLanguages()的方法。

由于您没有遵循JavaBean命名约定,因此无法使用OGNL提供的语法糖,您需要实际调用该方法。

注意:您应该遵循JavaBean命名约定;出于某种原因,它们是一种惯例。任何依赖于反射的Java,如OGNL,都需要它。

答案 1 :(得分:0)

使用以下代码修复

{{1}}