天天看點

struts2<s:textfield>value預設值的問題

 <%

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頁面

繼續閱讀