使用Primefaces我将用户刚刚点击的组件的id传递给bean。我希望bean改变这个组件的样式。 bean的相关部分:
public void passIdClicked() {
FacesContext context = FacesContext.getCurrentInstance();
Map map = context.getExternalContext().getRequestParameterMap();
String idClicked = (String) map.get("idClicked");
UIComponent tile = FindComponent.doFind(context, idClicked);
Iterator<UIComponent> it = tile.getChildren().iterator();
UIComponent comp = it.next();
if (comp.getId().equals(idClicked)) {
HtmlOutputText labelDone = (HtmlOutputText) comp;
labelDone.setValue("heyyyyyyyyy");
labelDone.setStyleClass("myStyleClass");
}
}
修改未出现在屏幕上。我错过了什么?
[编辑] UI代码: (在初始化阶段,动态地在“tiles”panelGroup中创建其他组件.passIdClicked方法修改其中一个组件 - 用户单击的组件。)
<h:head>
</h:head>
<h:body>
<h:form id="form">
<h:commandButton actionListener="#{bean.createNewTile()}" title="new" value="new"/>
<p:remoteCommand name="sendNameClicked" actionListener="#{bean.passIdClicked}"/>
</h:form>
<h:panelGroup layout="block" id="tiles">
</h:panelGroup>
<script type="text/javascript">
$(document).ready(function() {
$('.tile').click(function() {
sendNameClicked([{
name: 'idClicked',
value: $(this).attr('id')
}]);
});
});
</script>
</h:body>
答案 0 :(得分:1)
您必须刷新组件,以便进行styleClass更改。
您可以 :
例如:
<f:ajax render="@all" />
或的
例如:
<p:someComponent id="componentId">
....
</p:someComponent>
...
<f:ajax render="componentId" />
答案 1 :(得分:1)
@kocko回答是绝对正确的,但既然您使用的是Primefaces,您也可以通过编程方式进行:
RequestContext.getCurrentInstance().update(comp.getClientId());