如何在play框架中隐藏文本字段

时间:2013-06-04 06:44:38

标签: scala playframework

如何在Play框架中隐藏文本字段?例如,如何隐藏此字段:

@inputText(userProfileForm("name"), '_label -> "Name")

4 个答案:

答案 0 :(得分:22)

这适用于所有浏览器:

@inputText(
    userProfileForm("name"),
    '_label -> "Name",
    'style -> "display: none"
)

请注意,这只隐藏字段,而不是标签等。

如果您想隐藏标签,也不能使用默认帮助程序。 但是,您可以自己指定输入字段:

<input type="hidden" name="name" value="@userProfileForm.data.get("name")" />

name应该是表单中字段的名称(在这种情况下恰好是name)。
我没有对value进行测试,但它应该可以正常工作,也许您需要在"周围删除name

如果这样做,隐藏数据将与表单中的其他数据一起发送到服务器。

修改
如果隐藏值为空,则表示在调用视图时未将其绑定到表单。您可以在Java中将名称绑定到这样的表单(我不知道Scala,但它解释为in the Play Scala documentation):

Map<String, String> data = new HashMap<>();
data.put("name","get the username here");

return ok(index.render(userProfileForm.bind(data));

另一个选项(在我看来更干净)是简单地将用户名作为参数传递给视图。控制器变为:

return ok(index.render(userProfileForm, "username goes here"));

在视图中,您可以简单地执行:

@(userProfileForm : Form[UserProfileForm])(name : String)

@helper.form(...){
    <input type="hidden" name="name" value="@name" />
    //...
}

答案 1 :(得分:6)

inputText帮助程序采用(Symbol, Any)的变量,表示html属性。如果您使用的是html5,则可以添加隐藏属性:

@inputText(userProfileForm("name"), '_label -> "Name", 'hidden -> "hidden")

通常hidden属性没有价值,但我无法找到有关如何使用帮助程序执行此操作的任何信息。在Chrome中,至少它也是这样的。

修改

不过,你也可以使用html代替帮助器:

<input attribute=value hidden />

答案 2 :(得分:3)

我知道这是一个老问题,但我有一个类似的问题,我想隐藏一个inputText,仍然使用帮助器来处理它。 最好和最干净的方法是编写自己的助手,添加自定义值以告知何时隐藏元素本身。 我找到了像这样的解决方案

我自己的字段构造函数

@(elements: helper.FieldElements)
@if(elements.args.contains('hideIt)){
    @elements.input
}else{
<div class="@if(elements.hasErrors) {error}">
    <div class="input">
        @elements.input
        <span class="errors">@elements.errors.mkString(", ")</span>
        <span class="help">@elements.infos.mkString(", ")</span> 
    </div>
</div>
}

我在视图文件中使用如下:

@inputText(form("fieldName"),
'hidden -> "true",
'hideIt -> true
)

现在你完成了:)

答案 3 :(得分:2)

虽然它有效,但我不喜欢@Aerus提供的hashmap版本,更喜欢在可能的情况下使用静态类型的表单,所以我想出了另一种选择。

final UserProfileForm initial = new UserProfileForm("get the username here");
return ok(index.render(Form.form(UserProfileForm.class).fill(initial));

然后,在配置文件中,您可以执行以下操作:

<input type="hidden" name="name" value="@userProfileForm("name").value" />