html - Select 标签总是返回 null

标签 html twitter-bootstrap select playframework

我正在尝试创建一个搜索模块,以根据用户选择的选择标准从数据库中搜索商店详细信息

index.scala.html

@import helper._
@import helper.twitterBootstrap._

@main(Html("Home")) {
  <!-- Main component for a primary marketing message or call to action -->
  <div class="jumbotron">
    <h1>Shop Directory</h1>
    <p>Lets you search a nearby Shop and get to know their location</p>
    <p>Search Shop by Product or Shop name</p>

    <form class="form-inline" action="@routes.SearchController.search()" method="post">
      <input type="text" class="form-inline input-lg" placeholder="Product/Shop name" name="keyword" required="keyword required">

      <select class="form-inline input-lg" id="Select1" name="criteria">
        <option value="">-:Select Criteria:-&nbsp;</option>
        <option value="shop">Shop</option>
        <option value="product">Product</option>
      </select>
      <button class="btn btn-lg btn-primary" role="button">Search</button>
    </form>
  </div>
}

搜索.java

package viewmodels;

public class Search {
  public String keyword;
  public String criteria;
}

SearchResult.java

package viewmodels;

import models.Shop;
import play.mvc.Controller;
import java.util.ArrayList;
import java.util.List;

public class SearchResult extends Controller {
  public String criteria;
  public String keyword;

  public List<Shop> shops;

  public SearchResult() {
    shops = new ArrayList();
  }
}

SearchController.java

package controllers;

import models.Product;
import models.Shop;
import play.data.DynamicForm;
import play.data.Form;
import play.mvc.Controller;
import viewmodels.Search;
import viewmodels.SearchResult;
import java.util.List;
import play.mvc.Result;
import static play.data.Form.*;

public class SearchController extends Controller {

  public static Result search() {

    Form<Search> requestData = form(Search.class).bindFromRequest();

    Search datatosearch = requestData.get();
    // String criteria="shop";
    String criteria = datatosearch.criteria;

    SearchResult result = new SearchResult();
    result.criteria = criteria;
    result.keyword = datatosearch.keyword;

    if (criteria == "shop") {
      List<Shop> shops = Shop.findByShopName(datatosearch.keyword);
      result.shops.addAll(shops);
    }
    else if (criteria == "product") {
      List<Shop> shops = Product.findByShopName(datatosearch.keyword);
      result.shops.addAll(shops);
    }

    return ok(views.html.search.results.render(result));
  }
}

如果我在我的 SearchController.java 中执行 String criteria="shop"String criteria="product" 那么它工作正常,这意味着我的模型查询是正确的,但是如果我用 String criteria = datatosearch.criteria 执行上面的代码,它会显示一个空白屏幕。

我正在使用 play 框架,我真的坚持这一点,我们将不胜感激。

最佳答案

您正在将字符串与 == 运算符进行比较,这是一个禁忌。将您的字符串比较更改为使用 String.equals,这样您实际上是在比较值而不是对象引用。

if (criteria.equals("shop") {
  ...
}
else if (criteria.equals("product") {
  ...
}

您可能还想添加一些验证来检查 criteria 是否不是 NULL

关于html - Select 标签总是返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22746791/

相关文章:

javascript - 无法让页面在点击时滚动到顶部

javascript - 使用用户输入控制的列表项数量创建无序列表时遇到问题

javascript - onclick 不应触发表单数据提交

javascript - 使用 jquery 和 ajax 将 json 对象发布到 mvc Controller

javascript - Twitter Bootstrap 主题和 iTunes 应用标题

html - 页脚问题

css - 如何应用 Laravel 5 教程中的基本 Bootstrap 样式?

MySQL选择行之间的行

mysql - 与右表中的 where 进行左连接

python - 从 <select> 表单中选择对象 (HTML)