无法:在Tapestry 5.3.6中选择提交调色板值



我有两个值:CHANNELS和WIDGETS。如果我选择第一个,我将显示所有通道的调色板和隐藏小部件调色板(都在区域中),如果我选择第二个,我会隐藏通道调色板区域和显示小部件调色板区域。两个选项板都是通过从数据库加载的项目预先选定的。selectedWidgets和selectedChannels都被注释为@Persist。问题是,客户想要删除选定的小部件,然后切换到频道并添加它们,所以需要两个操作。如果他保存,删除的窗口小部件仍然存在,并且频道被正确添加。这有可能解决吗?

如果我理解正确,您需要在表单提交时保存两个选项板的值。所以两个调色板都应该出现在表单上。

若要解决此问题,只需隐藏一个选项板,然后在选择值更改时显示另一个。不需要服务器端操作(也不需要区域):

<t:select t:id="select" .../>
<t:palette id="widgets" .../>
<t:palette id="channels" .../>

和js使用jquery:

var $select = $('#' + selectId);
var $widgets = $('#' + widgetsId);
var $channels = $('#' + channelsId);
$select.on('change', function() {
  if ($select.val() == 1 /* or another value corespondent to channels */) {
    $widgets.hide();
    $channels.show();
  } else {
    $widgets.show();
    $channels.hide();
  }
});

多亏了sody,我成功地解决了这个问题。第一个主要部分是去掉区域,只需要有一个包含组件的表单并一次性提交整个内容,第二个主要部分则是在正确的时间触发sody提到的javascript。如果我有时间,我会粘贴我的html、java和javascript代码,我相信有人会帮我清理它。