舞者和模板工具包:<选择>以前选择的</select>

时间:2014-03-29 20:55:54

标签: perl template-toolkit dancer

我正在使用模板工具包,使用perl Dancer。我有一个表格,这个表格有一个选择。 我正在尝试提交表单后页面返回到相同的表单,维护选择中选择的上一个项目。 Ldap_List包含10个项目。

这是选择代码:

<form class="well form-inline" method="post" action="[% request.uri_base %]/foo/ldap">
<fieldset>  
<legend>Select the LDAP:</legend>
<select class="selectpicker" name="ldap_selected">
[% FOREACH ldap IN Ldap_List %]
   <option value=[% ldap %]>[% ldap %]</option>
[% END %]
</select>
<button type="submit" class="btn btn-primary">Go!</button>
</fieldset>
</form>

选择了最后一个ldap的变量是ldap_selected,并且已定义并具有正确的值,我用以下方法检查:

[% IF ldap_selected %]
   [% ldap_selected %]
[% END %]

我试过这个,但不起作用:

<select class="selectpicker" name="ldap_selected">   
   [% FOREACH ldap IN Ldap_List %]
       [% IF ldap == ldap_selected %]
           <option value=[% ldap %] selected>[% ldap %]</option>
       [% ELSE %]
           <option value=[% ldap %]>[% ldap %]</option>
       [% END %]
   [% END %]
</select>

因为这样,在select中出现了ldap_selected,但它是列表中唯一的一个选项。

我怎样才能实现这个目标?

1 个答案:

答案 0 :(得分:1)

您只需要在HTML Form标记周围添加一个简单的Select标记,然后使用类似Form的内容读取Perlscript中的params->{'ldap_selected'}参数。我建议你阅读Dancer Documentation

对于这种情况,您可以开始查看here


编辑:

编辑后,似乎是Template Toolkit问题。你说,你有ldap_selected的价值,它似乎是你需要的价值。 [% IF ldap == ldap_selected %]正是您需要做的事情。你的语法是正确的。

我可以看到两个可能的问题/解决方案:

  1. ldap_selected包含换行符或未设置。
  2. ldap包含换行符。
  3. 在浏览器中用 ctrl + u 检查每个变量的输出。也许你可以看到换行符。尝试使用硬编码IF ...ldap_selected)和

    [% IF ldap_selected == 'foo' %]部分
    [% FOREACH ldap IN [ 'foo', 'bar', 'baz' ] -%]
    

    ldap部分。

    当无效时,请检查您是否更改了TT

    中的MyWeb-App/config.yml配置