Tengo una plantilla de Thymeleaf

<input type="text"    th:field="*{purchasePrice}" ../>

Asignada a esta propiedad:

private float purchasePrice;

Pero tengo este error:

Failed to convert property value of type java.lang.String to required type float for property purchasePrice; nested exception is java.lang.NumberFormatException: For input string: "0,132872"

También he intentado con

Failed to convert property value of type java.lang.String to required type float for property purchasePrice; nested exception is java.lang.NumberFormatException: For input string: "0.132872"

También probé con <input type="text" th:field="${purchasePrice}" .../>

Pero tengo este error

 java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'purchasePrice' available as request attribute
2
Salvador Borés 18 feb. 2018 a las 18:45

2 respuestas

La mejor respuesta

Supongo que su private float purchasePrice; está definido en una clase POJO simple. Digamos que el POJO se llama Price:

public class Price {

    private float purchasePrice;

    public float getPurchasePrice() {
        return purchasePrice;
    }

    public void setPurchasePrice(float purchasePrice) {
        this.purchasePrice = purchasePrice;
    }
}

Para hacer visible *{purchasePrice} en la vista, primero debe agregar Pirce a un atributo de modelo en su clase de controlador:

 @GetMapping("/")
 public String index(Model model) {
     model.addAttribute("price", new Price());
     return "index";
 }

El formulario HTML se ve simple como:

<form method="POST" th:action="@{/price}" th:object="${price}">
    <input type="text" th:field="*{purchasePrice}" />
    <button type="submit" name="submit" value="value" class="link-button">This
        is a link that sends a POST request</button>
</form>

Verá que agrego un nuevo campo llamado th:object="${price}".

Objeto de comando es el nombre que Spring MVC le da a los beans de respaldo de formulario, esto es, a los objetos que modelan los campos de un formulario y proporcionan métodos getter y setter que serán utilizados por el framework para establecer y obtener los valores ingresados por el usuario en el navegador. lado.

La asignación para la solicitud de publicación es similar a la siguiente:

@PostMapping("/price")
public String index(@ModelAttribute Price price) {
    return "index";
}

Entonces, si envío el valor 0.132872, se convierte en el objeto Price y contiene el valor purchasePrice = 0.132872;

enter image description here

0
Patrick 22 feb. 2018 a las 08:06

No debe ser

Field = "* {purchasePrice}"

Más bien debería ser

Th: field = "$ {purchasePrice}"

-2
Darshan 19 feb. 2018 a las 03:33