2012-05-06 27 views
1

這裏有雲: 我通過這個如何將<s:actionerror />的值從一個jsp頁面攜帶到另一個頁面?

<head> 
     <meta http-equiv="Refresh" CONTENT="0;URL=populatefields.action"> 

</head> 

刷新命名的index.jsp頁面並且是叫我的行動。這裏是我的struts.xml映射

<struts> 

     <package name="com.action" extends="struts-default"> 
      <action name="*fields" method="{1}" class="com.action.RegisterAction"> 
    <result name="populate">/register.jsp</result> 
    <result name="fields">/success.jsp</result> 
<result name="error">/index.jsp</result> 
    </action> 

我在這裏做什麼是對的index.jsp的負荷,我以這樣的URL 'populatefields.action'刷新它。這將調用我的操作類和populate方法(通配符方法調用).Populate方法從數據庫中選擇條目並將它們分配給表單字段屬性,並且將控件註冊到register.jsp中,其中一些值已填充。[即動態填充根據當前用戶]

在register.jsp形式的一部分,如果一些驗證檢查是否有喜歡 if(getUssername.equals("")) {this.addActionerror("Empty field -Uname-"); return error;}

的問題是在返回「錯誤」,控制進到index.jsp和然後填充方法和自動領域填充,但填充方法不會拋出任何錯誤,所以是空的或錯誤丟失... 任何想法如何我可以訪問錯誤?通過在我的操作類中設置dem全局?動作錯誤來自index.jsp,但我想刷新頁面evry時間它加載選擇值形式數據庫...我可以從一個jsp頁面的動作錯誤的值到另一個?

+0

如果你想要更復雜的動態行爲,你只能使用html獲得更好的效果,最簡單的事情就是使用AJAX。這裏有很多使用JSON插件的例子。通過將錯誤推送到會話中,您所要求的可能是可能的,但這將是一個脆弱的解決方案,不適用於多種Web應用程序,因此最好堅持一種適用於大多數情況的方法。 – Quaternion

+0

它檢查我的答案! – Nil

回答

1

完成:我從來沒有想到會是這麼簡單..沒有需要轉移的<s:actionerror/>值。但你可以使用<jsp:include page='index.jsp'>如果它亙古不變的刷新,僅包含<s:actionerror/>標籤不轉移你的整個頁面。就像當你使用一個<a>鏈接來調用你的動作,而不是在這種情況下,刷新它的行動方式..但在我的情況下,我想刷新所以:

就在之前,當你鍵入返回錯誤;在你的執行方法中複製你的填充方法的內容。如

execute{ 
if(validation fails){populate method content(leave the return statement); 
    return error; 
} 
else 
return success; 
} 

在struts.xml中改變這個< result name="error">/register.jsp</result>而不是<result name="error">/index.jsp</result>

也沒有必要寫在index.jsp中<s:actionerror>,因爲你現在重定向它register.jsp所以只是把它寫在register.jsp ...

現在刷新豐達工作是需要您註冊形式.. 現在試着提交如果驗證失敗,同樣的頁面將被調用以填充字段:d和採取行動的錯誤...

+0

正常情況下,通過使用'「input」'結果成爲窗體,可以輕鬆地處理這個問題。 S2將在驗證失敗時自動轉發輸入結果。看起來你正在做一些手工工作,其中框架已經具備了功能。 –

+0

對,如果你命名爲你有一個名爲myform-input.jsp的輸入表單,並使用了約定插件,那麼你可能不需要做任何事情,只需遵循一個命名約定。 – Quaternion

相關問題