当前位置: 首页 > 面试题库 >

通过表单传递的元素未由服务器接收,也未显示在正面。修补方法| 角度| Dropwizard

卜季萌
2023-03-14
问题内容

服务器端显示调用了PATCH方法,并在数组末尾添加了一个null,而不是一个新的Item数组,其名称和价格取自用户输入。

服务组件中的PATCH方法:

      patchAdd(menu: MenuModel | number, itemToAdd: ItemClass): Observable<any> { 
        const id = typeof menu === 'number' ? menu: menu.id;
        const url = `${this.menusUrl}/add/${id}`;

        return this.http.patch(url, itemToAdd, httpOptions).pipe ()
}

patchItAdd函数,该函数实现patchAdd方法并从html中获取数据: 请注意,由于尝试不成功,有一些注释。

 patchItAdd(name: string, price: number){
        name = name.trim();
        if (!name) {return;}
        const id = +this.route.snapshot.paramMap.get('id');
        this.menuService.patchAdd(id, this.item)
        //With this ^^ , the value is null, but new element is added to the array. Cannot read property push of undefined. PATCH is triggered on the backend.
        // this.menuService.patchAdd(id, {name, price} as ItemClass) ----- Three errors, nothing happens
        .subscribe(item => {
          this.items.push(item);
        });}

应当收集用户输入并将数据传递给函数的HTML标签:

<label class="forma">
          Name of the item:
          <input #itemName placeholder="What's the name of the item?" onfocus="this.placeholder =''" onblur="this.placeholder = 'What\'s the name of the item?'"/><br><br>
          Item's price:
          <input #itemPrice placeholder="What's the price?"onfocus="this.placeholder =''" onblur="this.placeholder = 'What\'s the price?'"/><br><br>
          <span class="addnewbuttontext"><button class="addnewitembutton" (click) = "patchItAdd(itemName.value, itemPrice.value)">Add</button></span>
      </label><br>

后端的PATCH方法(Dropwizard):

   @PATCH
   @Path("/add/{menuId}")
   public void addMenuItem(
            @PathParam("menuId") final int menuId,
            final Item item) {  
      final java.util.List<Item> items = this.menuRepository.get(menuId).getItems();
      items.add(item);
   }

单击“
ADD”按钮并调用patchItAdd函数后,仅将一个null添加到后端的数组。显然,因此也没有数据显示在前端。我在做什么错,或者至少我应该如何使用Angular
7在前端使用PATCH方法?


问题答案:

即使我对问题没有完全的了解,我也会尝试解决几个问题。

为什么要放+那里?它将以数字表示形式转换变量,这就是您想要的吗?该get()调用的返回值是string | null

const id = +this.route.snapshot.paramMap.get('id');

在这里你打电话menuService.patchAddthis.item,但我想你想创建一个新的Item使用的输入值实例nameprice

// Angular
(click) = patchItAdd(itemName.value, itemPrice.value)

// Java
patchItAdd(name: string, price: number){
     ...
     this.menuService.patchAdd(id, this.item)

我的假设正确吗?

我看到的另一个问题是您将传递了id,它应该string(或者number在您的情况下,因为您使用对其进行了转换+patchAdd

const id = +this.route.snapshot.paramMap.get('id');
this.menuService.patchAdd(id, this.item)

patchAdd函数期望a MenuModel,这是一个复杂的对象。
怎么样?您确定这是您想要的吗?

让我们patchItAdd接受menu.id价值

(click) = "patchItAdd(menu.id, itemName.value, itemPrice.value)"

现在更新方法

// Now this method accept the MenuModel#id property
patchItAdd(menuId: number, name: string, price: number){
   if (!name) {
      return;
   }

   const trimmedName = name.trim();

   // Construct a new ItemClass instance.
   // You need to take care by yourself of the "person" property and the "quantity" property
   const newItem = new ItemClass("", trimmedName, 0, price)

   this.menuService.patchAdd(menuId, newItem).subscribe(item => {
      this.items.push(item);
   });
}

还更新patchAdd方法以接受菜单ID,而不是完整的菜单ID。MenuModel

// Now this method accepts the menu ID  
patchAdd(menuId: number, itemToAdd: ItemClass): Observable<any> { 
   const url = `${this.menusUrl}/add/${menuId}`
   return this.http.patch(url, itemToAdd, httpOptions)
}

在后端添加一个无参数的构造函数 Item

public Item() { }


 类似资料:
  • 当我选择并发送json时,将数据发布到工作正常的endpoint。 当我选择时,我没有收到任何东西。我已经在我的中定义了它们。 服务器js配置: 这是邮递员的要求。

  • 我的程序显示一行水平滑动的按钮,其中包含艺术作品的文字描述。单击按钮时,ImageActivity启动以显示相应的艺术品。但是,当我点击任何文本按钮时,它总是显示数组中最后一幅画。 我试图将int ID传递给第二个活动,以便一旦单击相应的描述,它将显示正确的绘画。 非常感谢。 以下是我的主要活动: 我正在尝试将整数ID传递给: } 还有绘画数据库,我要从那里获取身份:

  • 我有一个简单的JSON提要,我可以解析它并在控制台中看到它,但我似乎无法将它显示在我的表视图中。我使用的是Xcode 5.0.2。我不确定为什么在回显到控制台时可以在for循环中看到它,而在表视图中却看不到它。 PhotoTableViewController.m

  • 我有客户端服务器聊天 客户端发送文件,服务器接收它们。但是,问题是,我不认为文件被正确接收,因为当我检查文件的大小时,我看到由于某些原因差异是一半! 我正在使用GUI在客户端浏览文件,然后我向服务器发送命令以知道客户端正在发送文件。但是它不工作 这里是客户端和服务器 计算机网络服务器 有人能帮我解决这个问题吗?因为我不知道如何正确发送和接收文件 谢谢你

  • 本文向大家介绍JavaScript显示表单内元素数量的方法,包括了JavaScript显示表单内元素数量的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript显示表单内元素数量的方法。分享给大家供大家参考。具体如下: JavaScript显示表单内元素的数量,不包含表单本身 希望本文所述对大家的javascript程序设计有所帮助。

  • 当用户选择一个标记时,我只想显示包含该标记的博客。例如,当一个用户选择了'c''标签时,只会显示带有该标签的帖子。 我的设置如下:我有一组包含post标签的博客,其中包含标签: null 这将显示blog-thumbnail组件 下面的代码部分是我的问题所在。它不起作用: 我在这方面花了大量的时间。有人能解释我做错了什么吗?