【问题标题】:Why does my Java program ignore my List in another html?为什么我的 Java 程序会忽略另一个 html 中的列表?
【发布时间】:2020-04-21 00:22:58
【问题描述】:

所以我的问题是,我正在向其中添加用户提供的新记录的列表在调用时被我的程序忽略。

这是第一个 html。用户向我提供了他们的收入、合同类型和年龄:

@RequestMapping(value = "/hello", method = RequestMethod.POST)
    public String initialData(@RequestParam() double incomeParameter,
                              @RequestParam() String contractParameter,
                              @RequestParam() int ageParameter
    ) {
        if (!contractParameter.equals("Contract work") &&
                !contractParameter.equals("Contract of mandate") &&
                !contractParameter.equals("Contract of employment")) {
            return "firsterror";
        } else {
            User newUser = new User();
            newUser.setIncome(incomeParameter);
            newUser.setTypeOfContract(contractParameter);
            newUser.setAge(ageParameter);
            service.getUsersListCommon().add(newUser);

            return "secondpage";
        }
    }

除非 contractParameter 是代码中提到的三个之一,否则他会得到第一个错误。这很好用。

然后,我正在尝试创建一个列表来存储用户提供的数据(收入、合同、年龄)。正在执行此操作,因为我需要这些数据才能让我的方法在下一页中工作。

我存储初始数据的列表位于 Service 类中,看起来像这样(不确定 setter 是否相关,我没有在任何地方使用它):

List<User> usersListCommon = new ArrayList<User>();

    public List<User> getUsersListCommon() {
        return usersListCommon;
    }

    public void setUsersListCommon(List<User> usersListCommon) {
        this.usersListCommon = usersListCommon;
    }

它作为service被@Autowired 加入到我的Controller 类中,因此您会看到service.getUsersListCommon()

然后用户按下 提交 按钮,他们将被定向到另一个 HTML,其中应该发生以下情况:

@RequestMapping(value = "/secondpage", method = RequestMethod.POST)
    public String detailedData(@RequestParam() int amountParameter,
                               @RequestParam() int timeParameter
    ) {
        User finalUser = new User();
        for (int i = 0; i < service.getUsersListCommon().size(); i++) {
            finalUser.setIncome(service.getUsersListCommon().get(i).getIncome());
            finalUser.setTypeOfContract(service.getUsersListCommon().get(i).getTypeOfContract());
            finalUser.setAge(service.getUsersListCommon().get(i).getAge());
        }
        if (finalUser.getAge() < 18) {
            return "tooyoung";
        } else if (finalUser.getIncome() < 2000) {
            return "toopoor";
        } else if (amountParameter > 10000) {
            return "toomuch";
        } else if (timeParameter > 35) {
            return "toolong";
        } else if (finalUser.getIncome() >= 2000 &&
                finalUser.getTypeOfContract().equals("Contract work") &&
                finalUser.getAge() <= 50 &&
                amountParameter <= 10000 &&
                amountParameter > 0 &&
                timeParameter <= 35) {
            return "granted";
        } else if (finalUser.getIncome() >= 2000 &&
                finalUser.getTypeOfContract().equals("Contract mandate") &&
                finalUser.getAge() <= 50 &&
                amountParameter <= 10000 &&
                amountParameter > 0 &&
                timeParameter <= 35) {
            return "granted";
        } else if (finalUser.getIncome() >= 2000 &&
                finalUser.getTypeOfContract().equals("Contract of employment") &&
                finalUser.getAge() <= 50 &&
                amountParameter <= 10000 &&
                amountParameter > 0 &&
                timeParameter <= 35) {
            return "granted";
        } else {
            return "requirementsnotmet";
        }
    }

现在,这里用户应该再给我两种类型的信息——他们想要贷款的金额和所需的贷款时间长度。

不要介意每种合同的条件都是一样的,到目前为止我还没有理会它,因为它目前只是一种装饰性的东西。

我的主要问题是,当用户提供这些附加数据并按提交...时出现此错误: 出现意外错误(类型=错误请求,状态=400)。 所需的双参数“incomeParameter”不存在

所以我的程序不承认之前的数据已提供并存储在我在第二个映射方法开始时调用的 List 中。


另外,不确定是否相关,但我的程序的第一页在浏览器中看起来像这样: http://localhost:8082/hello

但是在我的 html 中按下按钮时:

<body>
<form method="post">
<div id="header">Welcome to a swift creditworthiness' check.</div>
<div class="subheader">Please, provide all the required data below and push the button below to see the result.</div>
<input type="text" name="incomeParameter" placeholder="Your monthly income">
<input type="text" name="contractParameter" placeholder="Kind of contract">
<input type="text" name="ageParameter" placeholder="Your age">
<input type="submit" value="Calculate">
</form>
<div class="questions">In case of any questions, please proceed here:</div>
</body>

...它确实将我重定向到下一页:

<body>
<form method="post">
<div id="header">Please, provide additional required data below:</div>
<input type="text" name="amountParameter" placeholder="Desired amount of the loan">
<input type="text" name="timeParameter" placeholder="Desired time of the loan">
<input type="submit" value="Calculate">
</form>
</body>

但不是像这样:http://localhost:8082/secondpage,它仍然是 http://localhost:8082/hello

我认为这是一个相当长的帖子,所以感谢您抽出时间来倾听我的问题。 :)

【问题讨论】:

    标签: java html list button mapping


    【解决方案1】:

    在您的“表单”标签中,我看不到“动作”属性。

    没有“动作”,当你提交一个表单时,下一个网络调用就是它自己。

    因此,如果您在 hello 页面中并按下提交,您将(再次)进入 hello 页面。

    【讨论】:

    • 我认为
      就足够了。 :( 知道我应该写什么作为“动作”吗?例如:
      - 我应该放什么?它应该去的地址?比如“/secondpage”?
    • 您的解决方案确实解决了我的一个问题(将 action="/secondpage" 添加到
      ),就像现在 localhost:8082 在点击按钮后确实向我显示 /secondpage (非常感谢那:)),但现在我遇到了另一个问题,因为我收到一条错误消息:“必需的 int 参数'amountParameter'不存在”......我的意思是,我知道它不存在,因为它应该现在添加?但在这之前,我已经收到了这个错误。
    • 第一个问题解决了,但现在我需要更多详细信息:1) html 页面及其操作是什么? 2) @RequestMapping 页面及其网址是什么? 3) 你想要的 url 和操作的“链”是什么?
    • 所以基本上只有两个“做”任何事情的 html 就是上面初始消息中显示的那些。 HTMLS“tooyoung”、“toopoor”、“toolong”、“toomuch”、“granted”和“requirementsnotmet”只是文本消息。他们现在什么都不做。仅有的两个带有 POST 方法的 @RequestMappings 是上面显示的,其他 HTMLS 都只有一个 GET 映射(例如 @RequestMapping(value = "/tooyoungo", method = RequestMethod.GET) public String tooYoung() { return "tooyoung" ; }).
    • 使用@RequestParam 定义的参数默认是强制的。也许您可以尝试使用 RequestParam(required = false) 有机会“稍后”输入 amountParameter,但我认为最好修改流程:a)用户调用 firstHtml,输入 3 个参数,提交表单和操作 firstHtml调用 /hello b) /hello “保存”数据并将用户“移动”到 secondHtml c) 在 secondHtml 用户输入 2 个参数,提交表单和操作 secondHtml 调用 /secondpage d) /secondpage “保存”新数据和“移动”用户到你怎么看?
    猜你喜欢
    • 1970-01-01
    • 2021-06-16
    • 2014-01-18
    • 1970-01-01
    • 2020-11-07
    • 2011-08-02
    • 2017-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多