在我的tml中,我有表格,其中字段由区域
更新简化tml:
<form t:id="editUserForm" t:zone="editRefresh" t:type="form">
<label>Search For User to Edit: </label>
<input type="text" id="editUser" />
<t:any
t:id="addNew"
element="button"
t:mixins="observe"
event="click"
zone="editRefresh"
fields ="['editUser']" >
Edit Selected User
</t:any>
<t:zone t:id="editRefresh">
...Fields here updated
<input t:type="submit" t:id="editUserButton" value="Edit User" />
</t:zone>
</form>
这些字段的填充没有问题,但是在提交表格时我会受到欢迎:
Render queue error in SetupRender[app/Administration:editloginname]: Component app/Administration:editloginname must be enclosed by a Form component.
检查日志后,后端代码仍然执行,然后抛出此错误。
此外 - 有没有办法让提交页面刷新?我在表单标签中指定了一个t:区域,因此当按下t:any按钮时表单不会刷新,并且区域更新但是当提交表单时我希望它按照惯例工作。
作为一种解决方法,我注入了表单,表单已打开并更改
return editRefresh.getBody();
要
return adminPage;
这可以作为一种解决方法,但不是我认为理想的。
答案 0 :(得分:3)
如果不包含表单,则无法呈现表单字段。这是因为Tapestry在呈现其字段时将某些内部状态存储在表单的隐藏输入中,如果您将该字段与表单分开呈现,则最终会出现无效的表单状态。
有关可用选项,请参阅此答案:https://stackoverflow.com/a/27961175/2414933
至于在提交时刷新页面:您可以继续使用您的解决方法,因为它完全有效。如果您不想将组件与包含页面结合使用,则可以在页面级别处理表单提交事件并 var options = {
chart: {
title: 'xxxx',
subtitle: 'xxxx',
focusTarget:'category'
},
annotations: {
textStyle: {
color: 'black',
fontSize: 11,
},
alwaysOutside: true
},
height:300,
vAxis: {format: 'short'},
colors: ['#17807E', '#4285F4']
};
function drawAudits(Data) //data comes from another function with ajax call
{
var dataTbl = new google.visualization.DataTable();
dataTbl.addColumn('string', 'Months');
dataTbl.addColumn('number', 'Scheduled');
dataTbl.addColumn('number', 'Done');
dataTbl.addColumn({ type:'number' , role: 'annotation' });
dataTbl.addColumn({ type:'number' , role: 'annotation' });
for (var i = 0; i < Data.length; i++)
{
dataTbl.addRow([Data[i].month, Data[i].AllAudits, Data[i].DoneAudits, Data[i].AllAudits, Data[i].DoneAudits]);
} //last 2 column for annotations
var chart = new google.charts.Bar(document.getElementById('columnChartDiv'));
chart.draw(dataTbl,options);
}
(请记住Tapestry events are bubbled)。
或者从表单组件中删除return this;
属性。如果没有t:zone
表单提交,则不会使用AJAX。
答案 1 :(得分:3)
我不知道我是否正确理解了您的问题,但如果您想将某个表单元素放入区域,您可以这样做:
http://jumpstart.doublenegative.com.au/jumpstart/examples/ajax/select1
这个例子帮助了我,我希望它也能帮到你。