在XPage上只能单击一次按钮



我有下面的XPage,它有一个表,只有两个tr。

第一个按钮本身是一个按钮,当第一次点击时,它会放入viewScope['showPasswordTr']布尔值true,当再次点击时放入false

第二tr具有在viewScope['showPasswordTr']为真的情况下呈现的输入。

我遇到的问题是,我只能点击一次按钮,这是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>

execId="buttonTd"disableValidators="true"添加到您的eventHandler属性中。那么你的例子就如预期的那样起作用了。

我对代码进行了一些优化(按钮内的事件处理+处理viewScope.showPasswordTr的较短代码(:

<?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="Toggle password field">
<xp:eventHandler event="onclick" submit="true"
refreshMode="partial" refreshId="buttonTable" execMode="partial"
disableValidators="true">
<xp:this.action>
<![CDATA[#{javascript:
viewScope.showPasswordTr = !viewScope.showPasswordTr}]]>
</xp:this.action>
</xp:eventHandler>
</xp:button>
</xp:td>
</xp:tr>
<xp:tr id="passwordLabelTr" rendered="#{!!viewScope.showPasswordTr}">
<xp:td id="passwordLabelTd">
<xp:text id="passwordText" style="font-size: 14px;" value="password:" />
</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>

最新更新