我有下面的XPage,它只有一个表,只有两个tr。
[第一个是按钮本身,它在第一次单击时会放入viewScope['showPasswordTr']
布尔值true
值,在再次单击时会放入false
布尔值。
第二个tr有一个输入,如果viewScope['showPasswordTr']
为true,则呈现该输入。
我遇到的问题是我只能单击一次按钮,并且由于存在输入字段,所以它是100%。如果我删除它,它将按预期工作
第二次,依此类推,按钮仅冻结并且不执行指定的onclick
事件。为什么会这样呢?而我该如何使其按预期工作呢?
提前感谢。
编辑
好吧,这显然是由于required
属性设置为true
...所以,我是否应该仅在受干扰的控件中检查元素是否为空?这是一个好习惯吗?
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:table id="buttonTable">
<xp:tr id="buttonTr">
<xp:td id="buttonTd">
<xp:button id="authAsPersonButton"
value="This button can be clicked only once" />
<xp:eventHandler event="onclick" submit="true"
refreshMode="partial" execId="buttonTable"
refreshId="buttonTable">
<xp:this.action>
<![CDATA[#{javascript:
print("clicked");
if(viewScope['showPasswordTr'])
{
viewScope['showPasswordTr'] = false;
}
else
{
viewScope['showPasswordTr'] = true;
}
}]]>
</xp:this.action>
</xp:eventHandler>
</xp:td>
</xp:tr>
<xp:tr id="passwordLabelTr" rendered="#{javascript:
return viewScope['showPasswordTr'] == true;
}">
<xp:td id="passwordLabelTd">
<xp:text id="passwordText" style="font-size: 14px;">
<xp:this.value>
<![CDATA[#{javascript:
return 'password:';
}]]>
</xp:this.value>
</xp:text>
</xp:td>
<xp:td id="passwordInputTd" align="right">
<xp:inputText id="passwordInput" password="true"
required="true">
</xp:inputText>
</xp:td>
</xp:tr>
</xp:table>
</xp:view>