두 개의 backbeans, 하나는 ui : repeat의 데이터를 검색하고 하나는 작업을 수행합니다.JSF 2 : 아약스 액션 중에 두 번째 빈에 첫 번째 빈이 호출되는 이유는 무엇입니까?
내 페이지가 렌더링 될 때 두 번째 백bean을 사용하여 작업을 수행하면 리듬 스 페이스 4와 함께 ajax 작업을 사용하더라도 첫 번째가 호출됩니다 (초기화 됨). 반복 구성 요소. 첫 번째 빈이 repeat 요소와 함께 호출된다는 것은 짜증나게합니다. 여기
내 코드 :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich">
<h:head>
</h:head>
<h:body>
<h:form>
<ui:repeat var="currentValue" value="#{test_form_backBean_1.testSimpleModels}">
#{currentValue.name}
<br />
</ui:repeat>
<a4j:commandButton value="Tester" actionListener="#{test_form_backBean_2.test}" execute="@this" render="@this">
</a4j:commandButton>
</h:form>
</h:body>
</html>
나의 첫번째 콩 :
@Named("test_form_backBean_1")
@RequestScoped
public class Test_form_backBean_1 {
private static final Logger logger = Logger.getLogger(Test_form_backBean_1.class);
private List<Test_Simple_Model> testSimpleModels;
@PostConstruct
public void init() {
if (logger.isTraceEnabled())
logger.trace("Initialisation de Test_form_backBean_1.");
testSimpleModels = new ArrayList<Test_Simple_Model>();
testSimpleModels.add(new Test_Simple_Model(1L, "name_1"));
testSimpleModels.add(new Test_Simple_Model(2L, "name_2"));
testSimpleModels.add(new Test_Simple_Model(3L, "name_3"));
testSimpleModels.add(new Test_Simple_Model(4L, "name_4"));
}
public List<Test_Simple_Model> getTestSimpleModels() {
logger.trace("getTestSimpleModels() : appel.");
return testSimpleModels;
}
public void setTestSimpleModels(List<Test_Simple_Model> testSimpleModels) {
logger.trace("setTestSimpleModels() : appel.");
this.testSimpleModels = testSimpleModels;
}
}
두 번째 : 당신의 도움에 미리
@Named("test_form_backBean_2")
@RequestScoped
public class Test_form_backBean_2 {
private static final Logger logger = Logger.getLogger(Test_form_backBean_2.class);
@PostConstruct
public void init() {
logger.trace("Initialisation de Test_form_backBean_2.");
}
public void test() {
logger.trace("test() : appel de la fonction de test.");
}
}
감사합니다.
먼저 답장을 보내 주셔서 감사합니다. 예, viewscoped는이 동작을 변경하지만 repeat 요소를 사용하면 첫 번째 bean이 호출되는 이유를 알 수 없습니다. 이 요소가 없으므로 (# {test_form_backBean_1.testSimpleModels.get (0) .name}) 예제를 사용하면 범위가 요청 인 경우에도 첫 번째 bean이 호출되지 않습니다. – Glasfeu
흥미 롭습니다. 'render = "@ none"'을 사용하면 어떨까요? 또한 사용중인 RichFaces 버전은 무엇입니까? –
RF-4.0.0. 최종. 나는 execute = "@ this"를 사용하고 render = "@ this"를 사용합니다. render = "@ none"으로 변경하면 같은 것입니다. – Glasfeu