powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / вопросы по JSF
14 сообщений из 14, страница 1 из 1
вопросы по JSF
    #38480822
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
отсюда
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<h:dataTable ...>
<h:column>
<h:form>
	<h:commandLink action="detail">
		<f:setPropertyActionListener  value="#{p}" target="#{ph.currentProduct}"/>
		<h:outputText value="#{p.name}" />
	</h:commandLink>
</h:form>
<h:column>
...
</h:dataTable>


сюда
Код: xml
1.
2.
3.
4.
5.
6.
7.
<h3>#{ph.currentProduct.name}</h3>
<h3>#{ph.currentProduct.id}</h3>

<h:form>
	<h:inputHidden value="#{ph.productId}"/>
	<h:commandButton value=... />
</h:form>



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
@Named("ph")
@RequestScoped
public class ProductHolder {
	
	private Product currentProduct;
        public String getProductId() {
		if(currentProduct == null) System.out.println("detail-page: currentProduct == null");
	}
        ...


(и класс Product, с полями id, name и геттерами-сеттерами)

На первой странице все корректно - из p мы получаем поля id и name, но на второй странице, после того как мы записали наше текушее p (Product) в бин "ph" , выводится только первая строка #{ph.currentProduct.name} (если поменять эти строки местами, то выведется id).
Т.е. во второй строке #{ph.currentProduct.id} дает null, так как метод getProductId() подверждает это, выводя "detail-page: currentProduct == null". Почему на второй странице выводится только первая строка? Т.е., почему при обращении к currentProduct второй раз там оказывается null ?
...
Рейтинг: 0 / 0
вопросы по JSF
    #38481000
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rema174,

покажите весь код, по этому куску все вроде ок. Product инжектится или как? Покажите его геттер и сеттер, дебажить пробовали где он зануляется?
...
Рейтинг: 0 / 0
вопросы по JSF
    #38481119
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть вероятность, что аннотация @RequestScoped не та, которая должна быть, но без полного кода это только догадки
...
Рейтинг: 0 / 0
вопросы по JSF
    #38481330
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.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">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Insert title here</title>
</head>
<body>
	
	<h:dataTable value="#{catalog.products}" var="p" border="1">
		<h:column>
			<f:facet name="header">
				<h:outputText value="Id"/>
			</f:facet>
			<h:outputText value="#{p.id}" />
		</h:column>
		<h:column>
			<f:facet name="header">
				<h:outputText value="Name"/>
			</f:facet>
			<h:form>
				<h:commandLink action="detail">
					<f:setPropertyActionListener  value="#{p}" target="#{ph.currentProduct}"/>
					<h:outputText value="#{p.name}" />
				</h:commandLink>
			</h:form>			
		</h:column>
		<h:column>
		<f:facet name="header">
			<h:outputText value="Price"/>
				</f:facet>
			<h:outputText value="#{p.price}" />
		</h:column>
	</h:dataTable>
	
</body>
</html>



Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:h="http://java.sun.com/jsf/html">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Insert title here</title>
</head>
<body>
	<h3>#{ph.currentProduct.name}</h3>
	<h3>#{ph.currentProduct.id}</h3>
</body>
</html>



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
package shop;

public class Product {
	
	private String id;
	private String name;
	private double price;

	public Product(String id, String name, double price) {
		this.id = id;
		this.name = name;
		this.price = price;
	}

	public String getId() {
		return id;
	}

	public String getName() {
		return name;
	}

	public double getPrice() {
		return price;
	}
}



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
package shop;

import java.util.ArrayList;
import java.util.List;

import javax.context.ApplicationScoped;
import javax.inject.Named;

@Named("catalog")
@ApplicationScoped
public class Catalog {
	
	private List<Product> products;
	
	public Catalog() {
		products = new ArrayList<Product>();
		products.add(new Product("p1", "Pencil", 1.20));
		products.add(new Product("p2", "Eraiser", 2.00));
		products.add(new Product("p3", "Ball Pen", 3.50));
	}
	
	public List<Product> getProducts() {
		return products;
	}
}



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
package shop;

import javax.context.SessionScoped;
import javax.inject.Named;

@Named("ph")
@SessionScoped
public class ProductHolder {
	
	private Product currentProduct;
	
	public Product getCurrentProduct() {
		if(currentProduct != null) System.out.println("getCurrentProduct(): currentProduct != null");
		if(currentProduct == null) System.out.println("getCurrentProduct(): currentProduct==null");
		return currentProduct;
	}
	
	public void setCurrentProduct(Product currentProduct) {
		this.currentProduct=currentProduct;
	}
	
}



так вот, при нажатии на продукт, в консоли я получаю
getCurrentProduct(): currentProduct != null
getCurrentProduct(): currentProduct==null
а в браузере только первую строку, т.е. видно, что после первого обращения к getCurrentProduct(), currentProduct обнуляется...
и какой правильно выбирать RequestScoped, т.к. доступны javax.context, javax.faces.bean, javax.enterprise.context, правда с последним вообще не работает. Контейнер TomEE.
INFO: Artifact 'myfaces-api' was found in version '2.1.10' from path 'file:/E:/apache-tomee-webprofile-1.5.2/lib/myfaces-api-2.1.10.jar'
INFO: Artifact 'myfaces-impl' was found in version '2.1.10' from path 'file:/E:/apache-tomee-webprofile-1.5.2/lib/myfaces-impl-2.1.10.jar'
...
Рейтинг: 0 / 0
вопросы по JSF
    #38481354
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
хотя нет, все-таки с энтерпрайс.контекст заработало...
но вопрос все-таки остался, для каких целей тогда javax.context, javax.faces.bean ?
...
Рейтинг: 0 / 0
вопросы по JSF
    #38481613
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
При работе в CDI контексте - javax.enterprise.context.SessionScoped (бин маркирован аннотацией @Named)
При работе в JSF контексте - javax.faces.bean.SessionScoped (в этом случае бин надо маркировать аннотацией @ManagedBean)
...
Рейтинг: 0 / 0
вопросы по JSF
    #38481775
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот оно что, этот момент я как-то упустил
...
Рейтинг: 0 / 0
вопросы по JSF
    #38483565
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
----------------------------------------------------------------------------------------------------------------------
...
Рейтинг: 0 / 0
вопросы по JSF
    #38483645
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
страница входа
Код: xml
1.
2.
3.
<h:inputText value="#{loginRequest.username}" />
<h:inputText value="#{loginRequest.password}" />
<h:commandButton value="Login" action="#{loginRequest.login}" />



Код: xml
1.
2.
3.
4.
5.
6.
7.
<navigation-rule>
	<from-view-id>/login.xhtml</from-view-id>
	<navigation-case>
		<from-outcome>loggedIn</from-outcome>
			<to-view-id>/catalog.xhtml</to-view-id>
	</navigation-case>
</navigation-rule>



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
import javax.enterprise.context.RequestScoped;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.inject.Named;

@Named("loginRequest")
@RequestScoped
public class LoginRequest {
	
	private String username;
	private String password;
	@Inject
	private UserHolder userHolder;

	public String getUsername() {
		return username;
	}

	public String getPassword() {
		return password;
	}

	public void setUsername(String username) {
		this.username = username;
		System.out.println("username=" + username);
	}

	public void setPassword(String password) {
		this.password = password;
		System.out.println("password=" + password);
	}

	public String login() {
		System.out.println("from login()");
		if (username.equals("u1") && password.equals("p1")) {
			userHolder.setCurrentUser(new User("u1", "p1", "1234"));
			System.out.println("return loggedIn");
			return "loggedIn";
		} else {
			FacesContext context = FacesContext.getCurrentInstance();
			context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Login failed", null));
			System.out.println("return null");
			return null;
		}
	}
}



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
import java.io.Serializable;

public class User implements Serializable {
	
	private static final long serialVersionUID = 1L;
	
	private String username;
	private String password;
	private String creditCardNo;

	public User(String username, String password, String creditCardNo) {
		this.setUsername(username);
		this.setPassword(password);
		this.creditCardNo = creditCardNo;
		System.out.println("User is created!");
	}

	public String getCreditCardNo() {
		return creditCardNo;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}
}



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
import java.io.Serializable;
import javax.enterprise.context.SessionScoped;
@SessionScoped
public class UserHolder implements Serializable {
        ...
	public void setCurrentUser(User currentUser) {
		System.out.println("setCurrentUser()");
		this.currentUser = currentUser;
	}
}



не нахожу почему ничего не происходит по входу?
сеттеры для юзернейма и пассворда не срабатывают, в методе login() ничего не происходит - в консоли вообще ничего не выводится из принтэлэнов.
...
Рейтинг: 0 / 0
вопросы по JSF
    #38483729
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вопрос снят
...
Рейтинг: 0 / 0
вопросы по JSF
    #38487449
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вход по логину выполняется, даже если не соответствуют логин-пароль(был пропущен тег form), т.е. совершается переход на catalog.xhtml (см. выше навигейшнрул). Но при этом не выполняется метод login() из LoginRequest ? Как так? Код выше.
...
Рейтинг: 0 / 0
вопросы по JSF
    #38500899
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
----------------------------------------------------------------------------------------------------------------------
...
Рейтинг: 0 / 0
вопросы по JSF
    #38500900
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в xhtml передаю поле h:inputHidden

Код: xml
1.
2.
3.
4.
5.
6.
7.
<ui:component>
<h:form>
	<h:inputHidden value="#{product.id}" name ="hidden"/>
	<h:inputText value="#{product.name}"/>
	<h:commandButton action="#{product.onUpdated}" value="OK"/>
</h:form>
</ui:component>



получаю в методе
Код: java
1.
2.
3.
4.
5.
6.
public String onUpdated() {
	FacesContext context = FacesContext.getCurrentInstance();
	String hiddenValue = context.getExternalContext().getRequestParameterMap().get("hidden");
	System.out.println("hidden : " + hiddenValue);
	return "updated";
}



но hiddenValue оказывается null
как же его получить?
...
Рейтинг: 0 / 0
вопросы по JSF
    #38500990
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вопрос закрыт
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / вопросы по JSF
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]