<%
Users user=(Users)session.getAttribute("userInfo");
%>
<s:textfield name="username" value=""></s:textfield>
value值里面要怎么写才能够拿到user里的username的值?
试过好多种方法都不行
<s:textfield name="username" value="${user.username}"></s:textfield>
<s:textfield name="user.username" value="${username}"/>
<s:textfield name="user.username" value="#request.username"/>
直接用<%=user.getUsername()%>也不行!
According to TLD or attribute directive in tag file, attribute value does not accept any expressions
登陆后我把用户信息放到session里,用户想修改的时候我想给他显示以前的值,请问要怎么做才能让textfield 里显示user里的username值?谢谢! 更多0
问题我是解决了,但用的不是这种方法。
我一开始的想法是错误的,不应该用这种方法。
用户登陆后把他的全部信息放在session里,这种做法很正常,但是用<s:textfield>,会提示你不支持任何表达式。
我们为什么会用struts2的标签,不用html的标签,原因很简单,就是他在提交失败后会留住页面状态。
反之,如果<s:textfield>的value属性支持表达式,那么提交失败后,它还会去读表达式里的值,也就是说它会还原成默认值,而不是用户修改后的值,这是我们都不想要的结果,我们要的是它既能显示默认值又能留住页面状态(修改过后的值)。
所以,我们可以这样去做:
我们去写一个GetUserInfo.action,在这个action里,我们去定义一个属性:Users user给它get,set方法,然后我们给他赋上session里的值,成功后页面跳转到jsp页面里,在jsp里面,我们这样去写:<s:textfield name="user.username"/>
只要user里面有值,页面上就会显示我们想要的值,而用户修改后提交失败后也能留住修改过后的值,这才是我们想要的效果。
当然,那个GetUserInfo.action就是修改个信息的超链接,而不是之前的jsp页面