![](/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.