Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Struts2:基于不带JavaScript的下拉值自动填充字段_Javascript_Html_Jsp_Struts2_Auto Populate - Fatal编程技术网

Struts2:基于不带JavaScript的下拉值自动填充字段

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

我试图搜索这个网站,但找不到我问题的答案

我正在开发一个java Struts2 web应用程序。 jsp页面上有3个表单字段,如下所示: (正在使用Struts2标签)


其他领域
......
.....
其他领域
当在test1字段中选择值时,test2和test3 需要根据 在test1中选择的值

根据我需要实现的流程,我需要根据jsp1(如上所示)的输入进行一些计算,并在jsp2上显示结果,该结果必须与jsp1具有完全不同的内容。我的问题仅限于jsp1中的数据输入

如果没有javascript,最好的方法是什么? 假设浏览器中的javascript被禁用 应用程序

谢谢,编辑

这里似乎有点混乱,让我们试着弄清楚:

基本上有三种方式可以从浏览器触发与服务器的通信:

  • 提交HTML
  • 提交JS
  • AJAX提交
  • 您可能关心或不关心支持禁用JavaScript的用户浏览

    • 如果你不在乎,那么你可以随心所欲
    • 如果你真的在乎,那么你面前有两条路:
      • 制作一个独特的页面版本,可以使用JS,也可以不使用JS(只使用选项“1”,“提交HTML”)
      • 使页面以两种可能的方式工作,相互排斥:在处理页面时,检测用户是否启用了javascript:如果启用了,则使用JS(提交或AJAX),如果没有,则使用非JS解决方案(“提交HTML”)
    这两种解决方案都可以使用JS,也可以不使用JS,但后者通常是首选的,因为您可以使用JavaScript和最终的AJAX为99%的用户建立一个漂亮、美观、面向用户体验的WebApp,并为1%的用户创建一个后备解决方案,即使该网站不会像JS版本那样好,即使它没有JS版本的所有功能,它仍然是可用的,核心功能也将可用

    正如我在上面的评论中所说的,WebApp的回退版本不需要像JS版本那么好、那么快、那么好的用户体验:它应该只是。。。工作

    例如,这个JSP在这两种情况下都可以工作:如果启用了JS,它将在选择元素后执行JavaScript提交;如果禁用JS,它将在按下提交按钮后执行提交

    禁用JS后,onchange将被忽略并进行处理。
    启用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;
        }
    }