前提
- 使用
<f:param>
标签 - 不适用于参数较大的情况
方案
使用 js 替换组件解析后的的onclick事件中的传的参数,实现向后台的不同传参
代码
<!-- 表格单选 -->
<p:column headerText="">
<label>
<input type="radio" class="table-radios" data-name="#{List.name}" onclick="selectOne(this)"/>
</label>
</p:column>
<!-- 操作选中的数据 此处 f:param 中的name和value不能一样-->
<p:commandButton id="tableEdit" value="Edit" ajax="true" actionListener="#{controller.edit()}">
<f:param name="getTableRow" value="selectIds"></f:param>
</p:commandButton>
<script type="text/javascript">
// 单选
let selectRowId;
function selectOne(obj){
const replaceStr = selectRowId ? selectRowId : "selectIds";
const value= $(obj).attr("data-name")
selectRowId = value;
// 设置edit按钮onclick事件传参
const editElem = document.getElementById("tableEdit")
const str = $(editElem).attr("onclick").replace(replaceStr, selectRowId);
$(editElem).attr("onclick", str);
// 修改选中项
const allRadios = $(".table-radios");
for (let i = 0; allRadios.length > i; i++) {
allRadios[i].checked= false;
}
obj.checked = true;
}
</script>