Xpages 重复控件中按钮的计算样式类
我在一个xp:repeat控件中有一个xp:button控件。我想计算按钮的styleClass属性,因此我通过向styleClass添加“active”来确定单击了哪个按钮 不幸的是,当我在viewScope变量中设置活动ID(所选按钮的ID)并将其与在styleClass中计算的ID进行比较时,它们会有所区别 区别在于viewScope中ID的值似乎包含一个额外的迭代器值,例如 视图:_id1:_id81:重复2:0:按钮2或 视图:_id1:_id81:重复2:1:按钮2 styleClass中的计算值不是,例如 视图:_id1:_id81:重复2:按钮2 最后一个ID值与所有其他按钮相同 为了计算我使用的ID值: getComponent(“button2”).getClientId(facesContext) 正如Tim Tripcony提到的Xpages 重复控件中按钮的计算样式类,xpages,xpages-ssjs,Xpages,Xpages Ssjs,我在一个xp:repeat控件中有一个xp:button控件。我想计算按钮的styleClass属性,因此我通过向styleClass添加“active”来确定单击了哪个按钮 不幸的是,当我在viewScope变量中设置活动ID(所选按钮的ID)并将其与在styleClass中计算的ID进行比较时,它们会有所区别 区别在于viewScope中ID的值似乎包含一个额外的迭代器值,例如 视图:_id1:_id81:重复2:0:按钮2或 视图:_id1:_id81:重复2:1:按钮2 styleCla
我做错了什么,或者如何在SSJS中正确计算styleClass属性?您不能依赖于静态资源(如样式表)中的控件ID,因为这些ID总是经过计算的。在xpage中添加更多组件,所有控件都可能收到新ID。因此,我严格避免在样式表中使用ID 我不能100%确定我是否理解您在这里试图做什么,因此以下解决方案可能与您无关;我无论如何都要试试:
btnInactive
创建自定义属性myRepeatBtn
。然后编写JS代码,将该值更改为btnActive
。您的css可以使用此选择器:
[myRepeatBtn=btnActive]{whatever: however;}
部分刷新将导致css对该更改作出反应
希望这有点道理;)
祝您好运。您不能依赖样式表之类的静态资源中的控件ID,因为这些ID总是经过计算的。在xpage中添加更多组件,所有控件都可能收到新ID。因此,我严格避免在样式表中使用ID 我不能100%确定我是否理解您在这里试图做什么,因此以下解决方案可能与您无关;我无论如何都要试试:
btnInactive
创建自定义属性myRepeatBtn
。然后编写JS代码,将该值更改为btnActive
。您的css可以使用此选择器:
[myRepeatBtn=btnActive]{whatever: however;}
部分刷新将导致css对该更改作出反应
希望这有点道理;)
祝你好运。我写下第一个答案后就回家了。在我的路上,我仔细考虑了这一点,认为我找到了一个相当简单的解决办法;由于我认为另一个答案中的一些想法有助于理解我的解决方案建议,所以我将其保留原样,并创建了这个新的解决方案。以下是您可以尝试的内容: 向中继器的
indexVar
属性添加一个值,例如rIndex
(您可以在所有属性下找到它)
假设要激活某个按钮,用户必须单击该按钮,您可以向其onclick事件添加一些SSJS代码,如下所示,以便将当前indexVar值存储在requestScope变量中:
requestScope.put("activeIndex", rIndex)
确保onclick对包含repeat控件的容器执行部分刷新
创建代码来计算重复按钮的样式类;如果repeat的迭代索引是存储在requestScope中的索引,则指定一个样式类,否则指定另一个:
if(rIndex==requestScope.get("activeIndex")){
"btnStyleActive";
}else{
"btnStyleInactive";
}
因为onclick部分刷新了转发器及其内容,所以应用了correctstyleClass
我家里没有DominoDesigner,所以我不能尝试,但我觉得这一定行得通
更新:刚刚构建了我自己的解决方案
.btnStyleInactive{color:blue;}
.btnStyleActive{color:red;};
<xp:repeat
id="repeat1"
value="objList"
var="obj">
<span class="#{javascript:return (obj.Condition) ? 'class1' : 'class2';}">
<xp:button
value="obj.Name"
id="button1"
styleClass="btn">
<xp:eventHandler
event="onclick" submit="true"
refreshMode="partial" refreshId="repeat1">
<xp:this.action>
...
</xp:this.action>
</xp:eventHandler>
</xp:button>
</span>
</xp:repeat>
....
.class1 .btn{
text-align: left;
}
.class2 .btn{
text-align: right;
}
...