java - JSF 导航参数依赖性

标签 java jsf

我正在尝试在 JSF 中实现这个简单的示例:有一个 user.xhtml 页面,可以使用 id 参数进行访问(user.xhtml?id=3/user.xhtml? id=12)。根据 id 页面应显示具有指定 id 的用户的信息。

@ManagedBean
@RequestScoped
public class OverviewController extends BaseController{

private UserDetails details;

@PostConstruct
@SuppressWarnings("unused")
private void init(){
    Integer userId = getIntegerParam(Constants.PARAMETER_USER); //this brings the value of the user parameter as an Integer
    if (userId != null){
        UserService userService = new UserService();
        details = userService .getDetails(userId);
    }
}

//GET & SET

}

在 xhtml 文件中,我有以下内容:

<div>
    Name: #{overviewController.details.name}
    City: #{overviewController.details.city}
</div>

此处引导控制的链接:

<h:link outcome = "user.xhtml" value = "details">
    <f:param name = "user" value = "2">
</h:link>

我的印象是,当通过 EL 访问overviewController 时,ManagedBean 将被构造,并且在 @PostConstruct 中,详细信息将被初始化。但我没有得到任何结果,并且overviewController甚至没有构建。 我将进一步讨论我的问题,我问如何实现依赖于多个参数或排序的搜索?

最佳答案

至于您的具体问题,您的@PostConstruct被错误地声明private而不是public

对于您的具体功能需求,这并不完全正确。您需要一个<f:viewParam>在目标页面中将用户ID请求参数设置为UserDetails支持 bean 中的属性。

user.xhtml

<f:metadata>
    <f:viewParam id="param_id" name="id" value="#{overviewController.details}"
        converter="userDetailsConverter" converterMessage="Bad request, unknown user"
        required="true" requiredMessage="Bad request, use a link from within the system"
    />
</f:metadata>
<h:message for="param_id" />

UserDetailsConverter

@FacesConverter("userDetailsConverter")
public class UserDetailsConverter implements Converter {

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object value) {
        if (!(value instanceof UserDetails) || ((UserDetails) value).getId() == null) {
            return null;
        }

        return String.valueOf(((UserDetails) value).getId());
    }

    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String value) {
        if (value == null || !value.matches("\\d+")) {
            return null;
        }

        UserDetails details = new UserService().getDetails(Integer.valueOf(value));

        if (details == null) {
            throw new ConverterException(new FacesMessage("Unknown user ID: " + value));
        }

        return details;
    }

}

OverviewController

private UserDetails details; // Getter+setter

另请参阅:

关于java - JSF 导航参数依赖性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8782849/

相关文章:

java - 如何在 javascript 中动态设置 jquery 多选选项的 selectedText ..?

java - 将 Java 转换为 XSD 的用例与使用 JAXB 将 XSD 转换为 java 的用例是否不同?

java - 在 Java 中重写 Iterables<Obj> 的正确方法

java - Primefaces 选择列表上的 JSF 2.0 "Conversion Error setting value ' courseID' for 'null Converter'

java - 从另一个请求范围的 Bean 实例化 session 范围的托管 Bean

jsf - 在 Facelet 模板中包含非 Facelet 内容

java - 多个ListCell渲染器

java - Guava 中 Supplier<T> 的倒数

java - 我在哪里可以找到 Unified EL 2.2 的语法?

javascript - 如何在Javascript方法中使用clientId获取selectOneMenu的值?