2015-01-30 2 views
0

Я работаю над игровой формой в течение нескольких дней и крайне расстроен. Я прошел через документации и использовал "Игра с Java" книги, и создал userWeights класс модели:Формат входного текста для входного текста всегда равен 0

public class UserWeights { 
     public HashMap<ServicesWeights, Float> userWeights = new HashMap<>(); 
     @Constraints.Required 
     public String user; 
     @Constraints.Required 
     public String password; 
     public int sampleSize; 
     public int misSampleSize; 
} 

Мой контроллер:

public class Application extends Controller { 

    private static final Form<UserWeights> userWeightsForm = Form.form(UserWeights.class); 

    public static Result index() { 
     return ok(index.render("Your new application is ready.")); 
    } 

    public static Result finder() { 

     return ok(finder.render(userWeightsForm)); 
    } 

    public static Result runWithUserInput() { 
     Form<UserWeights> boundForm = userWeightsForm.bindFromRequest(); 

     if (boundForm.hasErrors()) { 
      return badRequest(index.render("FAIL")); 
     } 
     UserWeights weights = boundForm.get(); 

     if (weights.checkboxChoices.get(0) != null && weights.checkboxChoices.get(0).equals("1")) { 
      runMethodA(); 
     } else if (weights.checkboxChoices.get(1) != null && weights.checkboxChoices.get(1).equals("2")) { 
      runMethodB(); 
     } 

     return TODO; 
    } 

И вид:

@(UserWeightsForm: Form[UserWeights]) 
@import helper._ 
@import helper.twitterBootstrap._ 

@main("finder") { 
<h1>Please fill the required fields</h1> 
@helper.form(action = routes.Application.runWithUserInput(), 'enctype -> "multipart/form-data") { 
<fieldset> 
    <legend>Finder</legend> 
    @helper.inputText(UserWeightsForm("user"),'_label -> "User") 
    @helper.inputPassword(UserWeightsForm("password"), '_label -> "Password") 
    <br/> 
     <label for="checkboxInput">Input Type:</label><br/> 

     <span class="buttonSet" id="checkboxInput"> 
     <input type = "checkbox" id = "genericCheckbox" name = 'checkboxChoices[0]' value = "1"> 
     <label for = "genericCheckbox">Generic Sample</label> 
     <input type = "number" name = 'UserWeightsForm("sampleSize")' id = "genericInput" value = "@UserWeightsForm("sampleSize").value"><br/> 
     <input type = "checkbox" id = "misCheckbox" name = 'checkboxChoices[1]' value = "2"> 
     <label for = "misCheckbox">MisSample</label> 
     <input type = "number" name = 'UserWeightsForm("misSampleSize")' id = "misInput" value = "@UserWeightsForm("misSampleSize").value"><br/> 
     </span> 

Что я хочу - если первый флажок установлен, пользователь заполнит поле ввода sampleSize, и это значение будет ограничено формой, а поле misSampleSize будет bla nk/zero/whatever (в этом случае я все равно не использую его). И наоборот.

Проблема. Когда я устанавливаю флажок и заполняю ввод текста sample, он связывает значение 0 с формой.

Я пробовал установить value в теге input равным нулю, удалив его полностью и используя вспомогательный шаблон (я предпочитаю избегать его, потому что он не так гибкий). Я не могу понять, почему число, которое я вводил в текстовое поле, игнорируется, и мои программы считают его 0.

So вопрос 1: Как остановить заполняемое значение 0?

вопрос 2 Как я могу отправить значение одного из текстовых полей (sampleSize или misSampleSize), и оставить другой один пустой, без получения ошибок формы?

Спасибо!

ответ

1

Я работаю в Scala, а не в Java. Но вы, я думаю, вам нужны ваши поля ввода и имени, чтобы они соответствовали вашим именам полей формы. Он использует привязки. Вы не показывать UserWeightsForm, но вы можете попробовать что-то вроде:

<input type="number" name='sampleSize' id="sampleSize" value="@UserWeightsForm("sampleSize").value.getOrElse("0")"><br/> 
    <input type="number" name='misSampleSize' id="misSampleSize" value="@UserWeightsForm("misSampleSize").value.getOrElse("0")"><br/> 

Я также использую «getOrElse» на значение в случае (ошибка может быть) нет никакого значения.

+0

В Java имя ввода должно совпадать с именем поля формы. Так что это должно быть 'name =" sampleSize "' – Sivakumar

+0

Спасибо @Sivakumar – wwkudu

+0

Спасибо за ответ, но он не работает. Он не будет компилироваться с помощью getOrElse(), и когда я укажу только имена полей, как вы предлагали, я получаю исключение во время выполнения - [IllegalStateException: No value]. – Ozilophile

Смежные вопросы