2016-04-14 1 views
1

Je suis en train de configurer une partie API simple qui accepte les requêtes POST via la soumission de formulaire. Le formulaire nécessite que l'utilisateur sélectionne une ou plusieurs cases à cocher partageant toutes le même nom, par ex.Pulvérisation - Formes d'analyse avec cases à cocher

<form> 
    <input type='text' name='textval'> 
    <input type='checkbox' name='cbox' value='val1'> Value 1 
    <input type='checkbox' name='cbox' value='val2'> Value 2 
    <button type='submit'>Submit</button> 
</form> 

Je cherche à traiter la demande en Spray comme ceci:

path("mypath") { 
    post { 
    formFields('textval, 'cbox) { (textval, cbox) => 
     // Now what? 
    } 
    } 
} 

Je ne peux pas trouver de la documentation dans le Spray Docs sur la façon de gérer ces entrées. En fait, cela semble être un issue qui a maintenant été fixed, mais je ne sais pas comment gérer ce champ de formulaire avec l'API de pulvérisation

Répondre

0

J'ai trouvé une solution un peu hacky pour répondre à mes besoins. J'ai changé les noms de mes cases à cocher pour représenter les valeurs qui leur sont associées, et j'utiliser des champs de formulaire en option dans mon itinéraire de pulvérisation

Voici ma nouvelle forme

<form> 
    <input type='text' name='textval'> 
    <input type='checkbox' name='cbox1' value='val1'> Value 1 
    <input type='checkbox' name='cbox2' value='val2'> Value 2 
    <button type='submit'>Submit</button> 
</form> 

Les changements d'itinéraire en conséquence

path("mypath") { 
    post { 
    formFields('textval, 'cbox1.?, 'cbox2.?) { (textval, cbox1, cbox2) => 
     complete(s"textval:'$textval', cbox1:'$cbox1', cbox2:'$cbox2'") 
    } 
    } 
} 

Les champs optionnels sont mappés au type Option[String] qui peut ensuite être facilement vérifié avec .isEmpty ou quelque chose de similaire pour déterminer si la case a été cochée. Cependant, un problème est que cela permettra aux formulaires d'être affichés sans cases à cocher car ils sont tous facultatifs. Vous pourriez peut-être en définir un par défaut.