![](/img/trans.png)
[英]struts2: update second select based on first select value using javascript and jquery
[英]Struts2: Autopopulating fields based on a dropdown value without JavaScript
我嘗試搜索該站點,但找不到我的問題的答案。
我正在開發Java Struts2 Web應用程序。 jsp頁面上有3個表單字段,如下所示:(正在使用Struts2標簽)
<s:form action="action1">
other fields
......
<s:select name="test1" list="{'A','B','C'}"></s:select>
<s:textfield name="test2"></s:textfield>
<s:textfield name="test3"></s:textfield>
.....
other fields
<s:submit value="submit1"><s/submit>
</s:form>
當在test1字段中選擇一個值時,將需要根據test1中選擇的值從數據庫中填充test2和test3。
根據我需要實現的過程,我需要基於jsp1(上面顯示)的輸入進行一些計算,並將結果顯示在jsp2上,該內容必須與jsp1完全不同。 我的問題僅限於jsp1中的數據輸入。
沒有JavaScript,這樣做的最佳方法是什么? 假設在訪問應用程序的瀏覽器中禁用了javascript。
謝謝,
編輯
似乎這里有些混亂,讓我們嘗試澄清一下:
從瀏覽器觸發與服務器的通信基本上有三種方法:
您可能會或可能不會在乎為禁用JavaScript的用戶提供支持;
這兩種解決方案都可以使用JS,也可以不使用JS,但后者通常是首選,因為您可以使用JavaScript以及最終使用AJAX為99%的用戶設置一個美觀,美觀的用戶體驗型WebApp。一個針對1%的用戶的后備解決方案,即使該網站不能像JS版本那樣好,即使它不具有JS版本的所有功能,它仍然可以使用,並且核心功能將可用。
正如我在上面的評論中所說,WebApp的后備版本不需要像JS版本一樣好,一樣快,在用戶體驗方面一樣好:它應該...可以工作。
例如,此JSP在這兩種情況下都可以工作:如果啟用了JS,則從Select中選擇一個元素后,它將執行JavaScript提交;如果禁用了JS,它將在按Submit按鈕后執行提交。
在禁用JS的情況下,onchange將被忽略並進行<noscript>
處理。
啟用JS后,將處理onchange並忽略<noscript>
。
<s:form action="myAction">
<s:select onchange="javascript:document.forms[0].submit();"
name="test1" value="test1" list="{'A','B','C'}" />
<s:textfield name="test2" value="test2" />
<noscript>
<span>
Since you have JS disabled,
you need to manually press to the GO button,
but you still can make it work ;)
</span>
<s:submit value="go" />
</noscript>
</s:form>
在你的行動中
public class MyAction extends ActionSupport{
private String test1="";
private String test2;
/* Getters and Setters */
public String execute(){
if (test1.length()>0)
assignValues();
return SUCCESS;
}
private void assignValues(){
if (test1.equals("A")){
test2 = "A was chosen, do something";
} else if (test1.equals("B")){
test2 = "B was chosen, do something else";
} else if (test1.equals("C")){
test2 = "C was chosen, what's next?";
}
}
}
您在評論中表達的其他疑問表明您可能需要退后一會並閱讀一些Struts2教程,以確保從框架中獲得最大收益。
如果您不想影響同一表單中的其他字段,只需在Action(使用Getter和Setter)中聲明一個變量,即可針對每個變量進行聲明:它們將保留在重新加載的頁面中,因為它們將與提交一起發送(因為它們采用表單形式),所以它們將通過Setter注入,它們將通過Getter讀回,並通過與它們的名稱和Action變量的匹配注入到新頁面中。
否則,您可以使用AJAX,但是我將從這里開始。
不,您不能嵌套表格。
感謝Andrea Ligios ,我對我的問題有以下解決方案。
jsp1更改如下
<s:form action="action2">
other fields
......
<s:select name="test1" list="{'Select','A','B','C'}"
onchange="javascript:document.forms[0].submit();"></s:select>
<noscript><s:submit value="populate test2 and test3"></s:submit></noscript>
<s:textfield name="test2"></s:textfield>
<s:textfield name="test3"></s:textfield>
.....
other fields
<s:submit value="submit1" action="action1"><s/submit>
</s:form>
struts.xml具有以下映射
.....
<action name="action2" class="MyAction" method="populate">
<result name="success">/jsp1.jsp</result>
</action>
<action name="action1" class="MyAction">
<result name="success">/jsp2.jsp</result>
</action>
.....
MyAction具有以下代碼
public class MyAction extends ActionSupport{
//all field declarations
//Getters and Setters
public String execute(){
//do processing for jsp2 based on values from jsp1
return SUCCESS;
}
public String populate(){
//populate test2 and test3 from database based on value of test1
return SUCCESS;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.