这可能是一个noob问题,但是在很多教程和示例中,我看到这些注释被用作好像它们做同样的事情.
然而,我遇到一些限制使用@Named一个(特别是依赖注入等)我找不到解释差异的来源,如果有人可以粗略概述何时使用一个或者其他.
我试图在启用RowSelection的情况下实现一个DataTable Editable.
但它抛出了一个例外:
启用选择时,DataModel必须实现org.primefaces.model.SelectableDataModel.
我在对象类和托管bean类中实现了DataModel,但错误是相同的.现在只为我显示一个空白表.请帮忙.
我正在尝试处理@ManagedProperty但没有成功!
我一直在关注这个指南,看起来并不难.但我的代码根本行不通!
这是一个小片段
@ManagedBean
@SessionScoped
public class LoginBean {
@EJB
private LoginUserLocal loginUser;
private boolean loggedIn = false;
private User user;
private StreamedContent image;
.
.
.
//--
@Named(value = "messagesBean")
@RequestScoped
public class MessagesBean {
@ManagedProperty(value = "#{loginBean}")
private LoginBean loginBean;
public LoginBean getLoginBean() {
return loginBean;
}
public void setLoginBean(LoginBean loginBean) {
this.loginBean = loginBean;
}
public String getUser() {
System.err.println(loginBean == null);
return loginBean.getUser().getUsername();
}
Run Code Online (Sandbox Code Playgroud)
这段代码给了我一个NullPointerException,说loginBean为null!
有什么建议吗?
我的验证器需要知道它是完整请求还是ajax请求.在我当前的解决方案中,我检查X-Requested-With元素的http请求标头:
public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
HttpServletRequest req = (HttpServletRequest) context.getExternalContext().getRequest();
if (req.getHeader("X-Requested-With") != null) {
// do something
} else {
// do something else
}
...
}
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来实现这一目标?对于不同的浏览器/ javascript库,我的解决方案是否"安全"?
更新:
刚刚发现,如果ajax请求来自Primefaces组件库(标记),则仅存在X-Requested-With标头<p:ajax>.
如果我使用普通的JSF,它就不存在了<f:ajax>.所以我的方法不适用 <f:ajax>.
使用<f:ajax>有一个不同的标题:
Faces-Request:partial/ajax
Run Code Online (Sandbox Code Playgroud)
Osw提出的解决方案适用于<f:ajax> 和 <p:ajax>:
我的JSF页面
<h:form>
<h:selectOneMenu id="studlist" value="#{studBean.selectedStudent}">
<p:ajax event="change" process="studlist" update="studdep" ></p:ajax>
<f:selectItems value="#{studBean.student}" var="s"
itemValue="#{s.studid}" itemLabel="#{s.name}"/>
<f:converter converterId="studentconverter"/>
</h:selectOneMenu>
</h:form>
Run Code Online (Sandbox Code Playgroud)
转换器类(StudentConverter)
public Object getAsObject(FacesContext context, UIComponent component, String value) {
Student studConvert= new Student();
List<Student> students=new ArrayList<Student>();
students=(ArrayList<Student>)((UISelectItems
component.getChildren().get(0)).getValue();
}
Run Code Online (Sandbox Code Playgroud)
在这个转换器上,Argument'String value'给itemLabel我为什么会这样?我在这个字符串上使用itemValue
我正在使用p:ajax监听器来处理值更改事件(因为valueChangeListener在表单提交时启动):
<p:ajax event="change" listener="#{bean.onNameChanged}"/>
Run Code Online (Sandbox Code Playgroud)
处理方法:
public void onNameChanged(final AjaxBehaviorEvent event)
Run Code Online (Sandbox Code Playgroud)
问题是,我无法在AjaxBehaviorEvent其类层次结构中找到读取输入旧值的位置.我也不能在谷歌中找到提示,如何获得旧价值......
如何在p:ajax onChange事件中访问旧值?
是否可以div根据条件隐藏等等(就像你在EL中使用渲染属性一样),而不必将其包装在<h:panelGrid ...>具有渲染属性的etc中?它破坏了我的布局.我只需要逻辑,而不是布局.
如果我更改像下面的微调器宽度只更改上/下箭头位置 - 文本区域保持默认,我如何更改微调器的大小 - 包括文本区域.
<p:spinner id="spinnerBasic" style="width:50px;"/>
Run Code Online (Sandbox Code Playgroud) 我在Tomcat 7上运行的JSF-2 Mojarra 2.0.8中有以下代码
<h:panelGrid id="yesNoRadioGrid">
<h:panelGrid columns="2" rendered="#{user.yesNoRadioGridFlag}">
<h:outputText id ="otherLbl" value="Select Yes or No"></h:outputText>
<h:selectOneRadio id="yesNoRadio" value ="#{user.yesNoRadio}">
<f:selectItems value="#{user.choices}"/>
<f:ajax execute="@form" render="userDetailsGrid "></f:ajax>
</h:selectOneRadio>
</h:panelGrid>
</h:panelGrid>
<h:message for ="yesNoRadio"> </h:message>
<h:panelGrid id="userDetailsGrid">
<h:panelGrid columns="2" rendered="#{user.yesNoRadio}">
<h:outputLabel>Name :</h:outputLabel>
<h:inputText id="customerName" value="#{user.customerName}"></h:inputText>
<h:outputLabel>Salary: </h:outputLabel>
<h:inputText id="customerSalary" value="#{user.customerSalary}"></h:inputText>
</h:panelGrid>
</h:panelGrid>
Run Code Online (Sandbox Code Playgroud)
我的managedBean包含以下内容
private enum Choice {
Yes, No;
}
private Choice yesNoRadio;
public Choice[] getChoices() {
return Choice.values();
}
public Choice getYesNoRadio() {
return yesNoRadio;
}
public void setYesNoRadio(Choice yesNoRadio) { …Run Code Online (Sandbox Code Playgroud) 我有一个有2个片段的活动.我决定使用PageAdapter在两个视图之间滑动,但是,为了保持接近Android设计的最佳实践,我还决定使用操作栏选项卡(固定的).我正在使用ActionBarSherlock和来自这里的一些代码来实现选项卡.只有pageadapter,活动运行得很好,现在我有两个问题:1)第一个片段(MatchRugbyButtonFragment)叠加自己的图像,所以如果我触摸它并移动或改变某些东西,我看到工作片段上方的图像.2)当我转到第二个片段时,第一个丢失所有变量(定时器复位,计数器复位,ecc).我必须创建到tablistener,因为一个片段是SherlockFragment而另一个片段是SherlockListFragment,并且导致一个错误,它无法将片段转换为SherlockListFragment.这是活动:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Vector;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.app.ListFragment;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Toast;
import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.ActionBar.Tab;
import com.actionbarsherlock.app.SherlockFragment;
import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuInflater;
import com.actionbarsherlock.view.MenuItem;
public class MatchRugbyFragments extends SherlockFragmentActivity implements View.OnClickListener, View.OnLongClickListener{
public static ArrayList<String> commentary;
public static ArrayAdapter<String> adapter;
// list contains fragments to instantiate in the viewpager
static List<Fragment> fragments = new Vector<Fragment>();
// page adapter between …Run Code Online (Sandbox Code Playgroud) android android-fragments actionbarsherlock android-actionbar
jsf ×6
jsf-2 ×5
primefaces ×3
ajax ×2
android ×1
cdi ×1
converter ×1
ejb ×1
el ×1
http-headers ×1
java ×1
jboss-weld ×1
managed-bean ×1
onchange ×1
tomcat7 ×1