- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
JSF-2.0、Mojarra 2.1.19、PrimeFaces 3.4.1
问题摘要:有 p:inputText
里面p:dataTable
和由 p:remoteCommand
触发的 inputText 操作它将 dataTable 行索引作为参数传递给 f:setPropertyActionListener
。但它总是传递数据表的最后一行,而不是包含当前单击的行的索引 p:inputText
.
从我之前的问题可以看出,我正在尝试使用 p:inputText
作为 Facebook 等状态的评论接受者。实现包括 p:dataTable
。它的行代表每个状态。看起来像:
<p:dataTable id="dataTable" value="#{statusBean.statusList}" var="status"
rowIndexVar="indexStatusList">
<p:column>
<p:panel id="statusRepeatPanel">
<p:remoteCommand name="test" action="#{statusBean.insertComment}"
update="statusRepeatPanel">
<f:setPropertyActionListener
target="#{statusBean.indexStatusList}"
value="#{indexStatusList}">
</f:setPropertyActionListener>
</p:remoteCommand>
<p:inputText id="commentInput" value="#{statusBean.newComment}"
onkeypress="if (event.keyCode == 13) { test(); return false; }">
</p:inputText>
</p:panel>
</p:column>
</p:dataTable>
上面的代码表示当按下回车键时,触发 p:remoteCommand
它调用托管 bean 的 insert 方法。
@ManagedBean
@ViewScoped
public class StatusBean {
List<Status> statusList = new ArrayList<Status>();
public int indexStatusList;
public String newComment
//getters and setters
public void insertComment() {
long statusID = findStatusID(statusList.get(indexStatusList));
statusDao.insert(this.newComment,statusID)
}
我们一起调试吧;假设 p:dataTable
中显示三种状态,单击 p:inputText
在第二状态(索引为1)中,输入“relax”并按回车键。
在调试控制台中,它正确显示“relax”,但发现错误的状态,因为 indexStatusList
值为 2,属于 p:statusList
中的最后一个状态 。它必须是 1,即 p:inputText
的索引单击数据表行。
我认为问题是关于p:remoteCommand
它获取屏幕上的最后一个索引。
它是如何工作的?
假设有一个 p:commandLink
而不是p:remoteCommand
和p:inputText
:
<p:commandLink action=#{statusBean.insertComment>
<f:setPropertyActionListener target="#{statusBean.indexStatusList}"
value="#{indexStatusList}"></f:setPropertyActionListener>
此组件成功通过 indexStatusList
当前点击的一个。
最佳答案
此解决方案中的概念问题在于 p:remoteCommand
的工作方式。它创建 JavaScript 函数,其名称在 p:remoteCommand
的 name
属性中定义。当您将其放入 dataTable
中时,它将迭代并创建名为 test
的 JavaScript 函数,次数与表中的行数相同,并且最后一个将仅是一个。因此,解决方案可以在 remoteCommand
的名称处附加索引,但这很糟糕,因为您将拥有许多不必要的 JavaScript 函数。更好的方法是创建一个函数并向其传递参数。因此,在数据表之外定义 remoteCommand
:
<p:remoteCommand name="test" action="#{statusBean.insertComment}" update="statusRepeatPanel">
并在您的onkeypress
事件中调用test
函数:
test([{ name: 'rowNumber', value: #{indexStatusList} }])
这将在您的 AJAX 请求中传递 rowNumber
参数。在支持 bean 的 insertComment()
方法中,您可以读取此参数并用它执行任何您想要的操作:
FacesContext context = FacesContext.getCurrentInstance();
Map map = context.getExternalContext().getRequestParameterMap();
Integer rowNumber = Integer.parseInt(map.get("rowNumber").toString());
注意:当您更新每行中的面板时,也许您可以将 remoteCommand
的 update
属性更改为 @parent
这样就可以了对于所有行。
编辑:您可以使用 Java 方法中的以下代码更新特定行中的特定面板:
RequestContext.getCurrentinstance().update("form:dataTable:" + rowNumber + ":statusRepeatPanel")
关于数据表内的 JSF PrimeFaces inputText,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14990692/
我有三个单选按钮,一个 inputText 和一个提交按钮。我只想在选择某个 radio 时验证提交时的输入文本。所以我有 在我的 bean 里,我有 public void validateNu
我想在页面加载时将焦点设置在JSF中的inputText字段上。我该如何实现? 最佳答案 如果您已经在使用HTML5和JSF 2.2,请使用HTML5 autofocus属性。在JSF 2.2中,可以
当特定 inputText 出现验证错误时,我想将焦点设置在 JSF 中的 inputText 字段上。我该如何实现? 我认为 inputText 上的 validatorMessage 会开箱即用,
我在 blazor 中有一个 InputText,我想阻止非数字字符,那么基本的 razor 和 c# 代码是什么?这是我需要它的工作方式,用户输入一个字符,它一起拒绝输入,并显示一条验证消息,说明只
我只需要允许字母字符 [A-Z,a-z]在 PrimeFaces inputText 字段中。 我怎样才能做到这一点? 最佳答案 不是针对 Primefaces,而是针对底层 JSF: 您可以在输入字
我需要实现以下内容: 以 ajax 方式上传多个文件(无需刷新整个页面) 每个文件的描述字段 必须使用 JSF 2.0 完成 以任意组合执行 3 个要求中的 2 个没有问题。使用 JSF 2.0 的多
我想在 JSF/Primefaces inputText 组件中显示默认的信息文本。 当用户单击文本字段时,此文本应该消失。 当他点击外部而不输入任何内容时出现。 如果用户提交的表单没有任何值,则不应
这个问题在这里已经有了答案: What is a NullReferenceException, and how do I fix it? (27 个回答) 2年前关闭。 当我使用 Blazor 中
JSF-2.0、Mojarra 2.1.19、PrimeFaces 3.4.1 问题摘要:有 p:inputText里面p:dataTable和由 p:remoteCommand 触发的 inputT
使用example from the Microsoft docs ,我正在尝试以编程方式将焦点设置到输入元素。 不幸的是,该示例使用标准 而我想用它来 InputText element . Mic
以下是我的 abc.xhtml 页面中的代码片段: 这是我的 panelGrid 我正在动态生成 inputTe
我正在尝试制作一个日期掩码和一个小时掩码,但我遇到了问题。这样,面膜就可以很好地发挥作用。但停止工作 Controller 上设置的默认输入。 public class someController
我正在使用 netbeans 开发一个 jsf Web 应用程序。
我正在使用 JSF,我想在 InputText 元素的 keyup 事件上调用监听器,但前提是输入文本长于 3 个字符。 我的代码是: 现在我正在我的听众中检查文本的长度,效果很好,但速度很
有没有一种方法可以将 inputText 的返回值与多个属性关联起来? 像这样(这是一个示例,语法中不存在 value1 和 value2 标签属性): 提前致谢! 最佳答案 也许只需将 inpu
我有一个富数据表的列,如下所示:
在 Jquery 中,我成功向托管 bean 发送值 document.getElementById('formId:inputId').value = "blavla"; document.getE
这个问题已经有答案了: Clear JSF form input values after submitting (5 个回答) 已关闭 8 年前。 我是 java 服务器面孔的新手。当我单击提交按钮
我正在尝试制作一个只接受浮点值的输入文本。此外,输入的值必须介于两个值之间。 我创建了一个包含“验证”方法的类。如果该值不在两个值之间,则会显示一个弹出窗口。 但是我有一个问题。该方法仅在用户点击“E
在使用 Moharra JSF 2 的 JBoss AS 7.1.1 上,使用 inputText 元素创建的 XHTML 文件不会呈现属性 required="true"。 没有错误,但输出的 HT
我是一名优秀的程序员,十分优秀!