JSF-2.0 인 Mojarra 2.1.19, PrimeFaces 3.4.1 문제의JSF PrimeFaces InputText]를은 데이터 테이블
요약 내부 : DataTable에 전달 p:remoteCommand
에 의해 발사 p:inputText
p:dataTable
내부와 InputText]를 행동 되세요 행 인덱스는 f:setPropertyActionListener
인 매개 변수로 사용됩니다. 그러나 그것은 항상 클릭 한 데이터를 포함하는 행의 인덱스가 아닌 dataTable의 마지막 행을 전달합니다. p:inputText
. 내 이전 질문에서 볼 수 있듯이
, 나는 페이스 북에 같은 상태에 대한 소감을 즐긴다으로 p:inputText
를 사용하려고하거나 등의 구현은 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의 삽입 메소드를 호출하는 말한다처럼 보인다.
@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"을 입력하고 Enter 키를 누릅니다. 디버그 콘솔에서
indexStatusList
이 p:statusList
의 마지막 상태 속한 2의 값을 가지고 있기 때문에 그것은 잘못된 상태를 찾습니다. dataTable 행을 클릭 한 p:inputText
의 인덱스 인 1이어야합니다. 화면의 마지막 색인을 취하는 문제는 p:remoteCommand
정도라고 생각합니다.
어떻게 작동합니까?
은의이 p:commandLink
대신 p:remoteCommand
및 p:inputText
가 상상하자
<p:commandLink action=#{statusBean.insertComment>
<f:setPropertyActionListener target="#{statusBean.indexStatusList}"
value="#{indexStatusList}"></f:setPropertyActionListener>
이 구성 요소가 성공적으로 indexStatusList
이 같은 현재 하나를 클릭 전달합니다.
고마워요 내 친구. 뷰 레이어를 올바르게 업데이트하기 위해 js 함수를 완료 한 후 업데이트 값을 검토 할 것이다. –
당신은 환영합니다. – partlov
거기에 원격지 명령에서 update = "form : dataTable : # {rowNumber} : statusRepeatPanel"할 수있는 방법이 있습니다. 전체 양식을 업데이트하고 싶지 않으므로? –