相关疑难解决方法(0)

如何选择合适的bean范围?

我注意到有不同的bean范围,如:

@RequestScoped
@ViewScoped
@FlowScoped
@SessionScoped
@ApplicationScoped
Run Code Online (Sandbox Code Playgroud)

每个人的目的是什么?如何为我的bean选择合适的范围?

jsf scope jsf-2 managed-bean

372
推荐指数
2
解决办法
20万
查看次数

如何从数据库中填充h:selectOneMenu的选项?

我正在创建一个Web应用程序,您必须从DB中读取对象/实体列表并在JSF中填充它<h:selectOneMenu>.我无法对此进行编码.有人可以告诉我该怎么做吗?

我知道如何List<User>从数据库中获取数据.我需要知道的是,如何填充此列表<h:selectOneMenu>.

<h:selectOneMenu value="#{bean.name}">
    ...?
</h:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)

database jsf selectonemenu

69
推荐指数
2
解决办法
14万
查看次数

'null Converter'的转换错误设置值 - 为什么我需要JSF中的转换器?

我有理解如何有效地使用JSF 2中的选择和POJO /实体.例如,我试图Warehouse通过下面的下拉列表选择一个实体:

<h:selectOneMenu value="#{bean.selectedWarehouse}">
    <f:selectItem itemLabel="Choose one .." itemValue="#{null}" />
    <f:selectItems value="#{bean.availableWarehouses}" />
</h:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)

以下托管bean:

@Named
@ViewScoped
public class Bean {

    private Warehouse selectedWarehouse;
    private List<SelectItem> availableWarehouses;

    // ...

    @PostConstruct
    public void init() {
        // ...

        availableWarehouses = new ArrayList<>();

        for (Warehouse warehouse : warehouseService.listAll()) {
            availableWarehouses.add(new SelectItem(warehouse, warehouse.getName()));
        }
    }

    // ...
}
Run Code Online (Sandbox Code Playgroud)

请注意,我使用整个Warehouse实体作为值SelectItem.

当我提交表单时,会失败并显示以下消息:

'null Converter'的转换错误设置值'com.example.Warehouse@cafebabe'.

我希望Warehouse当我将它包装在一个中时,JSF可以将正确的对象设置为我的托管bean SelectItem.将我的实体包装在里面SelectItem意味着跳过Converter为我的实体创建一个.

Converter每当我想在我的实体中使用实体时,我真的必须使用<h:selectOneMenu>吗?JSF应该可以从可用项列表中提取所选项.如果我真的必须使用转换器,那么实际的方法是什么?到目前为止,我想到了这个:

  1. Converter为实体创建实现. …

jsf converter selectonemenu jsf-2

38
推荐指数
1
解决办法
5万
查看次数

正确的实施方式等于合同

我有一个名为User的域对象.用户的属性包括ssoId,name,email,createdBy,createdDate和userRole.其中,ssoId必须是唯一的,因为没有两个用户可以拥有相同的sso id.所以我的equals方法检查sso id并返回true或false.

@Override public boolean equals(Object o) {
    if (!(o instanceof User))
      return false;
    return user.getSsoId().equals((User)o.getSsoId());
}
Run Code Online (Sandbox Code Playgroud)

我觉得这是一个不正确的实现,尽管就业务规则而言是正确的.对于具有相同sso id但具有不同的名称或电子邮件或两者的值的两个对象,上述实现将返回true.我应该更改我的平等合同以检查所有字段的相等性吗?你的建议是什么?

java

18
推荐指数
1
解决办法
1万
查看次数

通过PrimeFaces输入组件检索的Unicode输入已损坏

当我还是用PrimeFaces V2.2.1,我能键入Unicode输入诸如与PrimeFaces输入组件中国如<p:inputText><p:editor>,并检索在管理bean方法好形状的输入.

但是,在我升级到PrimeFaces v3.1.1后,所有这些字符都变成了Mojibake或问号.只有拉丁语输入才能正常,中文,阿拉伯语,希伯来语,西里尔语等字符会变得格格不入.

这是怎么造成的,我该如何解决?

unicode jsf character-encoding primefaces mojibake

13
推荐指数
1
解决办法
1万
查看次数

JSF转换器验证错误:值对SelectOneMenu UIComponent无效

我在requestScope中使用managedBean userHome,其中实体'user'将被保留.用户具有以ManyToOne关系映射的leader列.我的代码如下所示

@ManagedBean
@RequestScoped
public class UserHome {
    private User user = new User();
        // Getters and Setters

    private List<SelectItem> selectItems = new ArrayList<SelectItem>();

    public UserHome() {
        for(User user: availableLeaders) {
            selectItems.add(new SelectItem(user.getName(), user));
        }
    }

    public void persis();
}
Run Code Online (Sandbox Code Playgroud)

User.java

public class User {
    @Id
    @Column
    private Integer id;

    @Column
    privat String name;

    @ManyToOne
    private User leader;
}
Run Code Online (Sandbox Code Playgroud)

我试图通过h:selectOneMenu这样的方式获得这个领导者的价值

<h:selectOneMenu value="#{userHome.user.leader}" converter="userConverter">
    <f:selectItems value="#{userHome.selectItems}"/>
</h:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)

我的转换器看起来像这样

@FacesConverter(forClass = User.class, value="userConverter")
public class UserConverter implements …
Run Code Online (Sandbox Code Playgroud)

jsf jpa

10
推荐指数
2
解决办法
7892
查看次数

信息:警告:FacesMessage已入队,但可能尚未显示

我创建了一个带有表单的用户界面,以从用户那里获取信息.提交表单时,它会在服务器日志中显示以下警告:

INFO: WARNING: FacesMessage(s) have been enqueued, but may not have been displayed.
sourceId=j_idt7:j_idt11[severity=(ERROR 2), summary=(j_idt7:j_idt11: Validation Error: Value is not valid), detail=(j_idt7:j_idt11: Validation Error: Value is not valid)]
Run Code Online (Sandbox Code Playgroud)

我试图解决它,但我不明白怎么做.这个问题是怎么造成的,怎么解决?

jsf message

8
推荐指数
1
解决办法
2万
查看次数

Jsf:验证错误值对SelectOneMenu无效

我有一个selectMenu,在处理程序中定义的(SelectItems)列表如下

Handler { List(SelectItem) stateList; State state; }
State { String stateCd; }
Run Code Online (Sandbox Code Playgroud)

JSF代码::

<h:selectOneMenu value="#{state.stateCode}">
  <f:selectItems value="#{handler.stateList}">
</h:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)

现在我的列表在requestScope中,我看到提交的值是字符串并出现在列表中但我仍然得到"验证错误:值无效".可以有人协助.

jsf

7
推荐指数
1
解决办法
3万
查看次数

使用Java Generics为实体实现转换器

我正在使用Spring和Hibernate开发JSF项目,其中包括许多Converter遵循相同模式的s:

  • getAsObject 接收对象id的字符串表示形式,将其转换为数字,并获取给定种类的实体和给定的id

  • getAsString receive和entity并返回转换为的对象的id String

代码基本上是以下内容(省略检查):

@ManagedBean(name="myConverter")
@SessionScoped
public class MyConverter implements Converter {
    private MyService myService;

    /* ... */
    @Override
    public Object getAsObject(FacesContext facesContext, UIComponent uiComponent, String value) {
        int id = Integer.parseInt(value);
        return myService.getById(id);
    }

    @Override
    public String getAsString(FacesContext facesContext, UIComponent uiComponent, Object value) {
        return ((MyEntity)value).getId().toString();
    }
}
Run Code Online (Sandbox Code Playgroud)

鉴于大量的ConverterS中的完全一样(除了类型MyServiceMyEntity当然的),我想知道,如果它使用一个通用的转换器是值得的.通用本身的实现并不困难,但我不确定声明Beans的正确方法.

可能的解决方案如下:

1 - 编写通用实现,让我们调用它MyGenericConverter,不需要任何Bean注释

2 - 将特定转换器ad写为子类,MyGenericConverter<T>并根据需要对其进行注释:

@ManagedBean(name="myFooConverter")
@SessionScoped
public class MyFooConverter implements MyGenericConverter<Foo> { …
Run Code Online (Sandbox Code Playgroud)

java generics jsf spring converter

7
推荐指数
1
解决办法
1万
查看次数

h:selectOneMenu具有用户定义的对象

我正在尝试实施两个 <h:selectOneMenu/>

第一个包含Type 1对象.当用户从该列表中选择一个对象时,<h:selectOneMenu/>将显示第二个对象.

这是我的代码

XHTML

<h:form>
<h:selectOneMenu value="#{handler.selectedType1}" valueChangeListener="#{handler.valueChanged}">
    <f:selectItems value="#{handler.types1}" var="type1" itemValue="#{type1.name}" itemLabel="#{type1.name}" />
    <a4j:ajax event="valueChange" render="type2List" execute="@this"/>
</h:selectOneMenu>
<h:selectOneMenu id="type2List" value="#{handler.selectedType2}" rendered="#{not empty handler.selectedType2}">
    <f:selectItems value="#{handler.types2}" var="type2" itemLabel="#{type2.name}" />
</h:selectOneMenu>
</h:form>
Run Code Online (Sandbox Code Playgroud)

托管bean

@ManagedBean
@ViewScoped
public class Handler {

    private Type1 selectedType1;
    private List<Type1> types1;
    private Type2 selectedType2;
    private List<Type2> types2;

        //getters, setters

        public void valueChanged(ValueChangeEvent event) {
        variants.clear();
        if (event.getNewValue() != null) {
            System.out.println("new value: " + event.getNewValue());
                        // Fill the second list
        }
    } …
Run Code Online (Sandbox Code Playgroud)

jsf

6
推荐指数
1
解决办法
1万
查看次数