Struts2:基于不带JavaScript的下拉值自动填充字段
我试图搜索这个网站,但找不到我问题的答案 我正在开发一个java Struts2 web应用程序。 jsp页面上有3个表单字段,如下所示: (正在使用Struts2标签)Struts2:基于不带JavaScript的下拉值自动填充字段,javascript,html,jsp,struts2,auto-populate,Javascript,Html,Jsp,Struts2,Auto Populate,我试图搜索这个网站,但找不到我问题的答案 我正在开发一个java Struts2 web应用程序。 jsp页面上有3个表单字段,如下所示: (正在使用Struts2标签) 其他领域 ...... ..... 其他领域 当在test1字段中选择值时,test2和test3 需要根据 在test1中选择的值 根据我需要实现的流程,我需要根据jsp1(如上所示)的输入进行一些计算,并在jsp2上显示结果,该结果必须与jsp1具有完全不同的内容。我的问题仅限于jsp1中的数据输入 如果没有javas
其他领域
......
.....
其他领域
当在test1字段中选择值时,test2和test3
需要根据
在test1中选择的值
根据我需要实现的流程,我需要根据jsp1(如上所示)的输入进行一些计算,并在jsp2上显示结果,该结果必须与jsp1具有完全不同的内容。我的问题仅限于jsp1中的数据输入
如果没有javascript,最好的方法是什么?
假设浏览器中的javascript被禁用
应用程序
谢谢,编辑
这里似乎有点混乱,让我们试着弄清楚:
基本上有三种方式可以从浏览器触发与服务器的通信:
- 如果你不在乎,那么你可以随心所欲李>
- 如果你真的在乎,那么你面前有两条路:
- 制作一个独特的页面版本,可以使用JS,也可以不使用JS(只使用选项“1”,“提交HTML”)李>
- 使页面以两种可能的方式工作,相互排斥:在处理页面时,检测用户是否启用了javascript:如果启用了,则使用JS(提交或AJAX),如果没有,则使用非JS解决方案(“提交HTML”)
- 制作一个独特的页面版本,可以使用JS,也可以不使用JS(只使用选项“1”,“提交HTML”)李>
启用JS后,onchange将被处理并被忽略
<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>
您在评论中表达的其他疑问表明,您可能需要退后一步,阅读一些Struts2教程,以确保从框架中获得最大收益
如果在同一表单中有其他字段不想受到影响,只需在操作中声明一个变量(使用Getter和Setter)即可:它们将保留在重新加载的页面中,因为它们将随submit一起发送(因为它们处于表单中),它们将通过Setter注入,它们将通过Getter读回,并通过与它们的名称和操作变量的匹配注入到新页面中
否则您可以使用AJAX,但我将从这里开始
不,您不能嵌套表单。多亏了,我的问题有以下解决方案
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>
为什么有同名的2
textfield
?test2和test3应该只显示还是也可以编辑?没有JavaScript?您想在没有JavaScript的情况下动态修改DOM中的某些内容吗?祝你好运。也许是魔术吧……如果我使用javascript,在禁用javascript的浏览器中这不是一个问题吗?安德里亚,你的意思是我在外部表单中编写另一个表单,并通过单击按钮填充test2和test3?我在同一表单中有其他字段,不希望它们受到干扰。在这种情况下,我的结果应该映射到什么(MyAction)不允许表单嵌套?Andrea,正如您在我上面编辑的文章中所看到的,我已经将一个操作连接到表单,并且在成功时映射到另一个jsp
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?";
}
}
}
<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>
.....
<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>
.....
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;
}
}