Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在struts2中选择下拉菜单,从struts1迁移到struts2_Struts2_Struts 1_Struts1 - Fatal编程技术网

在struts2中选择下拉菜单,从struts1迁移到struts2

在struts2中选择下拉菜单,从struts1迁移到struts2,struts2,struts-1,struts1,Struts2,Struts 1,Struts1,下面是来自jsp的Struts1代码片段 <logic:notEmpty name="user" property="myLanguages" scope="session"> <html:select name="user" property="defaultLanguage"> <html:optionsCollection label="languageName"

下面是来自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中)


请帮我找出我犯了什么错误。

JSP和scriptlet并不等同

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

标记中,您试图调用名为
getMyLanguages()
的方法

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


注意:您应该遵循JavaBean命名约定;这是一个有原因的惯例。任何依赖反射的Java,如OGNL,都需要反射。

修复了下面的代码

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


抱歉Dave Newton这是问题中我的复制粘贴问题,我遵循JavaBean约定,我已经更新了question@learningknowledge那我就得玩它了;您是否有一个最小的工作示例w/a pom,以便我可以在本地尝试?如果只是一个OGNL问题,应该很容易复制。示例w/a pom我不理解这个。。。这是一个演示此问题的最简单的示例,它使用了一个
pom.xml
文件,以便轻松构建和复制。我正在进行的迁移不是maven项目,但struts1的代码工作正常,而迁移代码(struts2代码)不工作